diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java index a08ba70..e9e7b0e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java @@ -58,5 +58,10 @@ * @return number of active containers on the node */ public abstract int getNumContainers(); - + + /** + * Get total resources on the node. + * @return total resources on the node. + */ + public abstract Resource getTotalResource(); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java index c2c5d27..99ba802 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java @@ -1314,6 +1314,14 @@ private Resource assignContainer(Resource clusterResource, FiCaSchedulerNode nod assert Resources.greaterThan( resourceCalculator, clusterResource, available, Resources.none()); + if (!Resources.fitsIn(capability, node.getTotalResource())) { + if (LOG.isDebugEnabled()) { + LOG.debug("Node : " + node.getNodeID() + + " does not have sufficient resources for request : " + request + + " node total capability : " + node.getTotalResource()); + } + return Resources.none(); + } // Create the container if necessary Container container = getContainer(rmContainer, application, node, capability, priority); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerNode.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerNode.java index bb9ba92..efed211 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerNode.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerNode.java @@ -49,6 +49,8 @@ private Resource availableResource = recordFactory.newRecordInstance(Resource.class); private Resource usedResource = recordFactory.newRecordInstance(Resource.class); + private Resource totalResourceCapability = + recordFactory.newRecordInstance(Resource.class); private volatile int numContainers; @@ -63,7 +65,12 @@ public FiCaSchedulerNode(RMNode node) { this.rmNode = node; this.availableResource.setMemory(node.getTotalCapability().getMemory()); - this.availableResource.setVirtualCores(node.getTotalCapability().getVirtualCores()); + this.availableResource.setVirtualCores(node.getTotalCapability() + .getVirtualCores()); + this.totalResourceCapability.setMemory(node.getTotalCapability() + .getMemory()); + this.totalResourceCapability.setVirtualCores(node.getTotalCapability() + .getVirtualCores()); } public RMNode getRMNode() { @@ -110,12 +117,21 @@ public synchronized void allocateContainer(ApplicationId applicationId, getAvailableResource() + " available"); } + public synchronized Resource getTotalResourceCapability() { + return this.totalResourceCapability; + } + @Override public synchronized Resource getAvailableResource() { return this.availableResource; } @Override + public Resource getTotalResource() { + return totalResourceCapability; + } + + @Override public synchronized Resource getUsedResource() { return this.usedResource; } 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/FSSchedulerNode.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSSchedulerNode.java index cc15a5d..52b0cc2 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSSchedulerNode.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSSchedulerNode.java @@ -51,6 +51,7 @@ .getRecordFactory(null); private Resource availableResource; + private Resource totalResourceCapability; private Resource usedResource = recordFactory.newRecordInstance(Resource.class); private volatile int numContainers; @@ -66,6 +67,8 @@ public FSSchedulerNode(RMNode node) { this.rmNode = node; + this.totalResourceCapability = + Resources.clone(node.getTotalCapability()); this.availableResource = Resources.clone(node.getTotalCapability()); } @@ -119,6 +122,11 @@ public synchronized Resource getAvailableResource() { } @Override + public Resource getTotalResource() { + return totalResourceCapability; + } + + @Override public synchronized Resource getUsedResource() { return usedResource; }