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 0914022..80f5eb0 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 @@ -1658,6 +1658,16 @@ public RMAppAttemptState transition(RMAppAttemptImpl appAttempt, } } + // Ack NM to remove finished AM container, not waiting for + // new appattempt to pull am container complete msg, new appattempt + // may launch fail and leaves too many completed container in NM + private void sendFinishedAMContainerToNM(NodeId nodeId, + ContainerId containerId) { + List containerIdList = new ArrayList(); + containerIdList.add(containerId); + eventHandler.handle(new RMNodeFinishedContainersPulledByAMEvent( + nodeId, containerIdList)); + } // Ack NM to remove finished containers from context. private void sendFinishedContainersToNM() { @@ -1686,9 +1696,13 @@ private void sendAMContainerToNM(RMAppAttemptImpl appAttempt, new ArrayList()); appAttempt.finishedContainersSentToAM.get(nodeId).add( containerFinishedEvent.getContainerStatus()); + if (!appAttempt.getSubmissionContext() .getKeepContainersAcrossApplicationAttempts()) { appAttempt.sendFinishedContainersToNM(); + } else { + appAttempt.sendFinishedAMContainerToNM(nodeId, + containerFinishedEvent.getContainerStatus().getContainerId()); } }