diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java index 3eefb8f..b0a83bc 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java @@ -402,11 +402,14 @@ protected void preemptResources(Resource toPreempt) { Iterator warnedIter = warnedContainers.iterator(); while (warnedIter.hasNext()) { RMContainer container = warnedIter.next(); - if ((container.getState() == RMContainerState.RUNNING || - container.getState() == RMContainerState.ALLOCATED) && - isResourceGreaterThanNone(toPreempt)) { - warnOrKillContainer(container); - Resources.subtractFrom(toPreempt, container.getContainer().getResource()); + if (container.getState() == RMContainerState.RUNNING || + container.getState() == RMContainerState.ALLOCATED || + container.getState() == RMContainerState.ACQUIRED) { + if (isResourceGreaterThanNone(toPreempt)) { + warnOrKillContainer(container); + Resources.subtractFrom(toPreempt, container.getContainer(). + getResource()); + } } else { warnedIter.remove(); } @@ -449,10 +452,11 @@ protected void warnOrKillContainer(RMContainer container) { ApplicationAttemptId appAttemptId = container.getApplicationAttemptId(); FSAppAttempt app = getSchedulerApp(appAttemptId); FSLeafQueue queue = app.getQueue(); - LOG.info("Preempting container (prio=" + container.getContainer().getPriority() + - "res=" + container.getContainer().getResource() + + LOG.info("Preempting container " + container + + " (prio=" + container.getContainer().getPriority() + + " res=" + container.getContainer().getResource() + ") from queue " + queue.getName()); - + Long time = app.getContainerPreemptionTime(container); if (time != null) { @@ -466,7 +470,7 @@ protected void warnOrKillContainer(RMContainer container) { // TODO: Not sure if this ever actually adds this to the list of cleanup // containers on the RMNode (see SchedulerNode.releaseContainer()). completedContainer(container, status, RMContainerEventType.KILL); - LOG.info("Killing container" + container + + LOG.info("Killing container " + container + " (after waiting for premption for " + (getClock().getTime() - time) + "ms)"); }