diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java index dcc880d4f62..ccd8903f52d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java @@ -950,6 +950,12 @@ private boolean isOverAMShareLimit() { return false; } + private boolean isOverNodeTotalResource(PendingAsk pendingAsk, + FSSchedulerNode node) { + return !Resources.fitsIn(pendingAsk.getPerAllocationResource(), + node.getTotalResource()); + } + @SuppressWarnings("deprecation") private Resource assignContainer(FSSchedulerNode node, boolean reserved) { if (LOG.isTraceEnabled()) { @@ -1013,6 +1019,10 @@ private Resource assignContainer(FSSchedulerNode node, boolean reserved) { + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId); } + + if (isOverNodeTotalResource(nodeLocalPendingAsk, node)) { + continue; + } return assignContainer(node, nodeLocalPendingAsk, NodeType.NODE_LOCAL, reserved, schedulerKey); } @@ -1030,6 +1040,9 @@ private Resource assignContainer(FSSchedulerNode node, boolean reserved) { + allowedLocality + ", priority: " + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId); } + if (isOverNodeTotalResource(rackLocalPendingAsk, node)) { + continue; + } return assignContainer(node, rackLocalPendingAsk, NodeType.RACK_LOCAL, reserved, schedulerKey); } @@ -1050,6 +1063,9 @@ private Resource assignContainer(FSSchedulerNode node, boolean reserved) { + schedulerKey.getPriority() + ", app attempt id: " + this.attemptId); } + if (isOverNodeTotalResource(offswitchAsk, node)) { + continue; + } return assignContainer(node, offswitchAsk, NodeType.OFF_SWITCH, reserved, schedulerKey); }