[
https://issues.apache.org/jira/browse/YARN-1412?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13844750#comment-13844750
]
Thomas Weise commented on YARN-1412:
------------------------------------
We implemented it in the AM, tracking resource requests made for a specific
host with relaxLocality=false and then, if they are not filled by the scheduler
after n heartbeats, dropping host constraint and switching to
relaxLocality=true. We would prefer to leave this to YARN with the combination
of specific host and relaxLocality=true, but it does not work.
The requirement is not unique to our application, and instead of handling it in
user land it would be great to see this working as expected in future YARN
versions.
> Allocating Containers on a particular Node in Yarn
> --------------------------------------------------
>
> Key: YARN-1412
> URL: https://issues.apache.org/jira/browse/YARN-1412
> Project: Hadoop YARN
> Issue Type: Bug
> Affects Versions: 2.2.0
> Environment: centos, Hadoop 2.2.0
> Reporter: gaurav gupta
>
> Summary of the problem:
> If I pass the node on which I want container and set relax locality default
> which is true, I don't get back the container on the node specified even if
> the resources are available on the node. It doesn't matter if I set rack or
> not.
> Here is the snippet of the code that I am using
> AMRMClient<ContainerRequest> amRmClient = AMRMClient.createAMRMClient();;
> String host = "h1";
> Resource capability = Records.newRecord(Resource.class);
> capability.setMemory(memory);
> nodes = new String[] {host};
> // in order to request a host, we also have to request the rack
> racks = new String[] {"/default-rack"};
> List<ContainerRequest> containerRequests = new
> ArrayList<ContainerRequest>();
> List<ContainerId> releasedContainers = new ArrayList<ContainerId>();
> containerRequests.add(new ContainerRequest(capability, nodes, racks,
> Priority.newInstance(priority)));
> if (containerRequests.size() > 0) {
> LOG.info("Asking RM for containers: " + containerRequests);
> for (ContainerRequest cr : containerRequests) {
> LOG.info("Requested container: {}", cr.toString());
> amRmClient.addContainerRequest(cr);
> }
> }
> for (ContainerId containerId : releasedContainers) {
> LOG.info("Released container, id={}", containerId.getId());
> amRmClient.releaseAssignedContainer(containerId);
> }
> return amRmClient.allocate(0);
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)