diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java index f4f97936c55..c574dc9c6aa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java @@ -611,12 +611,6 @@ private RMAppImpl createAndPopulateNewRMApp( amReq.setPriority(RMAppAttemptImpl.AM_CONTAINER_PRIORITY); } - // set label expression for AM ANY request if not set - if (null == anyReq.getNodeLabelExpression()) { - anyReq.setNodeLabelExpression(submissionContext - .getNodeLabelExpression()); - } - // Put ANY request at the front if (!amReqs.get(0).equals(anyReq)) { amReqs.remove(anyReq); @@ -627,9 +621,13 @@ private RMAppImpl createAndPopulateNewRMApp( String queue = submissionContext.getQueue(); Resource maxAllocation = scheduler.getMaximumResourceCapability(queue); for (ResourceRequest amReq : amReqs) { + // save old node label expression + String amReqNodeLabelExpression = amReq.getNodeLabelExpression(); SchedulerUtils.normalizeAndValidateRequest(amReq, maxAllocation, queue, isRecovery, rmContext, null, nodeLabelsEnabled); + // restore original node label expression + amReq.setNodeLabelExpression(amReqNodeLabelExpression); amReq.setCapability(scheduler.getNormalizedResource( amReq.getCapability(), maxAllocation)); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java index 801d690fa53..d15524ed512 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java @@ -18,6 +18,7 @@ package org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt; +import org.apache.hadoop.yarn.server.utils.BuilderUtils; import static org.apache.hadoop.yarn.util.StringHelper.pjoin; import java.io.IOException; @@ -538,7 +539,11 @@ public RMAppAttemptImpl(ApplicationAttemptId appAttemptId, this.attemptMetrics = new RMAppAttemptMetrics(applicationAttemptId, rmContext); - this.amReqs = amReqs; + this.amReqs = new ArrayList<>(); + for(ResourceRequest amReq : amReqs){ + this.amReqs.add(ResourceRequest.clone(amReq)); + } + this.blacklistedNodesForAM = amBlacklistManager; final int diagnosticsLimitKC = getDiagnosticsLimitKCOrThrow(conf);