diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java index b1324c1d7b0..c9a81be5537 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java @@ -607,16 +607,6 @@ private void checkNodeLabelExpression(T containerRequest) { "Cannot specify more than two node labels" + " in a single node label expression"); } - - // Don't allow specify node label against ANY request - if ((containerRequest.getRacks() != null && - (!containerRequest.getRacks().isEmpty())) - || - (containerRequest.getNodes() != null && - (!containerRequest.getNodes().isEmpty()))) { - throw new InvalidContainerRequestException( - "Cannot specify node label with rack and node"); - } } private void addResourceRequestToAsk(ResourceRequest remoteRequest) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java index 7d29d052927..f2f3587ba60 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java @@ -39,6 +39,7 @@ import java.util.TreeSet; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.CommonConfigurationKeys; import org.apache.hadoop.io.Text; import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.SecurityUtil; @@ -708,6 +709,17 @@ public void testAskWithNodeLabels() { Assert.assertNull(req.getNodeLabelExpression()); } } + // set container with nodes and racks with labels + client.addContainerRequest(new ContainerRequest( + Resource.newInstance(1024, 1), new String[] { "rack1" }, + new String[] { "node1", "node2" }, Priority.UNDEFINED, true, "y")); + for (ResourceRequest req : client.ask) { + if (ResourceRequest.ANY.equals(req.getResourceName())) { + Assert.assertEquals("y", req.getNodeLabelExpression()); + } else { + Assert.assertNull(req.getNodeLabelExpression()); + } + } } private void verifyAddRequestFailed(AMRMClient client,