diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java index 8c54f4e..d01c9b9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerPage.java @@ -97,9 +97,9 @@ public void render(Block html) { UL ul = html.ul("#pq"); for (FairSchedulerQueueInfo info : subQueues) { float capacity = info.getMaxResourcesFraction(); - float steadyFairShare = info.getSteadyFairShareMemoryFraction(); - float instantaneousFairShare = info.getFairShareMemoryFraction(); - float used = info.getUsedMemoryFraction(); + float steadyFairShare = info.getSteadyFairShareResourcesFraction(); + float instantaneousFairShare = info.getFairShareResourcesFraction(); + float used = info.getUsedResourcesFraction(); LI> li = ul. li(). a(_Q).$style(width(capacity * Q_MAX_WIDTH)). @@ -157,7 +157,7 @@ public void render(Block html) { } else { FairSchedulerInfo sinfo = new FairSchedulerInfo(fs); fsqinfo.qinfo = sinfo.getRootQueueInfo(); - float used = fsqinfo.qinfo.getUsedMemoryFraction(); + float used = fsqinfo.qinfo.getUsedResourcesFraction(); ul. li().$style("margin-bottom: 1em"). diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/FairSchedulerQueueInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/FairSchedulerQueueInfo.java index 5fbfe51..25b4e7e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/FairSchedulerQueueInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/FairSchedulerQueueInfo.java @@ -32,24 +32,25 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSLeafQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.policies.DominantResourceFairnessPolicy; import org.apache.hadoop.yarn.util.resource.Resources; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso({FairSchedulerLeafQueueInfo.class}) -public class FairSchedulerQueueInfo { +public class FairSchedulerQueueInfo { private int maxApps; @XmlTransient - private float fractionMemUsed; + private float fractionResourcesUsed; @XmlTransient - private float fractionMemSteadyFairShare; + private float fractionResourcesSteadyFairShare; @XmlTransient - private float fractionMemFairShare; + private float fractionResourcesFairShare; @XmlTransient - private float fractionMemMinShare; + private float fractionResourcesMinShare; @XmlTransient - private float fractionMemMaxShare; + private float fractionResourcesMaxShare; private ResourceInfo minResources; private ResourceInfo maxResources; @@ -57,12 +58,22 @@ private ResourceInfo steadyFairResources; private ResourceInfo fairResources; private ResourceInfo clusterResources; - + private String queueName; private String schedulingPolicy; private Collection childQueues; - + + private static float resourceInfoRatio(String schedulingPolicy, ResourceInfo a, ResourceInfo b) { + float memoryRatio = b.getMemory() == 0 ? 0 : (float)a.getMemory() / b.getMemory(); + if (schedulingPolicy.equals(DominantResourceFairnessPolicy.NAME)) { + float vCoresRatio = b.getvCores() == 0 ? 0 : (float)a.getvCores() / b.getvCores(); + return Math.min(1, Math.max(memoryRatio, vCoresRatio)); + } else { + return Math.min(1, memoryRatio); + } + } + public FairSchedulerQueueInfo() { } @@ -75,8 +86,7 @@ public FairSchedulerQueueInfo(FSQueue queue, FairScheduler scheduler) { clusterResources = new ResourceInfo(scheduler.getClusterResource()); usedResources = new ResourceInfo(queue.getResourceUsage()); - fractionMemUsed = (float)usedResources.getMemory() / - clusterResources.getMemory(); + fractionResourcesUsed = resourceInfoRatio(schedulingPolicy, usedResources, clusterResources); steadyFairResources = new ResourceInfo(queue.getSteadyFairShare()); fairResources = new ResourceInfo(queue.getFairShare()); @@ -86,12 +96,10 @@ public FairSchedulerQueueInfo(FSQueue queue, FairScheduler scheduler) { Resources.componentwiseMin(queue.getMaxShare(), scheduler.getClusterResource())); - fractionMemSteadyFairShare = - (float)steadyFairResources.getMemory() / clusterResources.getMemory(); - fractionMemFairShare = (float) fairResources.getMemory() - / clusterResources.getMemory(); - fractionMemMinShare = (float)minResources.getMemory() / clusterResources.getMemory(); - fractionMemMaxShare = (float)maxResources.getMemory() / clusterResources.getMemory(); + fractionResourcesSteadyFairShare = resourceInfoRatio(schedulingPolicy, steadyFairResources, clusterResources); + fractionResourcesFairShare = resourceInfoRatio(schedulingPolicy, fairResources, clusterResources); + fractionResourcesMinShare = resourceInfoRatio(schedulingPolicy, minResources, clusterResources); + fractionResourcesMaxShare = resourceInfoRatio(schedulingPolicy, maxResources, clusterResources); maxApps = allocConf.getQueueMaxApps(queueName); @@ -110,19 +118,19 @@ public FairSchedulerQueueInfo(FSQueue queue, FairScheduler scheduler) { } } } - + /** * Returns the steady fair share as a fraction of the entire cluster capacity. */ - public float getSteadyFairShareMemoryFraction() { - return fractionMemSteadyFairShare; + public float getSteadyFairShareResourcesFraction() { + return fractionResourcesSteadyFairShare; } /** * Returns the fair share as a fraction of the entire cluster capacity. */ - public float getFairShareMemoryFraction() { - return fractionMemFairShare; + public float getFairShareResourcesFraction() { + return fractionResourcesFairShare; } /** @@ -163,16 +171,16 @@ public ResourceInfo getUsedResources() { * Returns the queue's min share in as a fraction of the entire * cluster capacity. */ - public float getMinShareMemoryFraction() { - return fractionMemMinShare; + public float getMinShareResourcesFraction() { + return fractionResourcesMinShare; } /** * Returns the memory used by this queue as a fraction of the entire * cluster capacity. */ - public float getUsedMemoryFraction() { - return fractionMemUsed; + public float getUsedResourcesFraction() { + return fractionResourcesUsed; } /** @@ -180,7 +188,7 @@ public float getUsedMemoryFraction() { * capacity. */ public float getMaxResourcesFraction() { - return fractionMemMaxShare; + return fractionResourcesMaxShare; } /**