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/capacity/AbstractLeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractLeafQueue.java index ba105710467fe..9bc7df08109c0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractLeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/AbstractLeafQueue.java @@ -1212,6 +1212,11 @@ public CSAssignment assignContainers(Resource clusterResource, assignmentIterator.hasNext();) { FiCaSchedulerApp application = assignmentIterator.next(); + // Skip processing if the application is already removed from the applicationAttemptMap + if (!applicationAttemptMap.containsKey(application.getApplicationAttemptId())) { + continue; + } + ActivitiesLogger.APP.startAppAllocationRecording(activitiesManager, node, SystemClock.getInstance().getTime(), application); @@ -1264,7 +1269,10 @@ public CSAssignment assignContainers(Resource clusterResource, userAssignable = canAssignToUser(clusterResource, application.getUser(), userLimit, application, candidates.getPartition(), currentResourceLimits); - if (!userAssignable && Resources.fitsIn(cul.reservation, appReserved)) { + if (!userAssignable + && Resources.fitsIn(cul.reservation, appReserved) + // Consider updating cul only if the application attempt is active. + && applicationAttemptMap.containsKey(application.getApplicationAttemptId())) { cul.canAssign = false; cul.reservation = appReserved; }