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/allocator/AllocationState.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/allocator/AllocationState.java index d1580bd995d..35ddffe19f6 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/allocator/AllocationState.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/allocator/AllocationState.java @@ -24,5 +24,6 @@ LOCALITY_SKIPPED, QUEUE_SKIPPED, ALLOCATED, - RESERVED + RESERVED, + PARTITION_SKIPPED } \ No newline at end of file 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/allocator/ContainerAllocation.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/allocator/ContainerAllocation.java index b9b9bcff2f6..6199ac22a19 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/allocator/ContainerAllocation.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/allocator/ContainerAllocation.java @@ -54,6 +54,12 @@ public static final ContainerAllocation QUEUE_SKIPPED = new ContainerAllocation(null, null, AllocationState.QUEUE_SKIPPED); + /** + * Skip the partition, and look at the other partitions of nodes + */ + public static final ContainerAllocation PARTITION_SKIPPED = + new ContainerAllocation(null, null, AllocationState.PARTITION_SKIPPED); + RMContainer containerToBeUnreserved; private Resource resourceToBeAllocated = Resources.none(); private AllocationState state; 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/allocator/RegularContainerAllocator.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/allocator/RegularContainerAllocator.java index cced238b601..354f81a5434 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/allocator/RegularContainerAllocator.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/allocator/RegularContainerAllocator.java @@ -154,7 +154,7 @@ private ContainerAllocation preCheckForNodeCandidateSet( NODE_DO_NOT_MATCH_PARTITION_OR_PLACEMENT_CONSTRAINTS + ActivitiesManager.getDiagnostics(dcOpt), ActivityLevel.NODE); - return ContainerAllocation.PRIORITY_SKIPPED; + return ContainerAllocation.PARTITION_SKIPPED; } if (!application.getCSLeafQueue().getReservationContinueLooking()) { @@ -860,7 +860,11 @@ private ContainerAllocation allocate(Resource clusterResource, result = preCheckForNodeCandidateSet(clusterResource, node, schedulingMode, resourceLimits, schedulerKey); if (null != result) { - continue; + if (result == ContainerAllocation.PARTITION_SKIPPED) { + return result; + } else { + continue; + } } } else { // pre-check when allocating reserved container @@ -928,7 +932,10 @@ public CSAssignment assignContainers(Resource clusterResource, schedulingMode, resourceLimits, schedulerKey, null); AllocationState allocationState = result.getAllocationState(); - if (allocationState == AllocationState.PRIORITY_SKIPPED) { + // When the partition not meet the priority it will return + // AllocationState.PARTITION_SKIPPED, this should also skip. + if (allocationState == AllocationState.PRIORITY_SKIPPED + || allocationState == AllocationState.PARTITION_SKIPPED) { continue; } return getCSAssignmentFromAllocateResult(clusterResource, result,