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/CSQueueMetrics.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/CSQueueMetrics.java index 586f837f147..a101ef68a0c 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/CSQueueMetrics.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/CSQueueMetrics.java @@ -300,4 +300,9 @@ public void setMaxCapacities(String partition, float capacity, maxAbsoluteCapacity.set(absoluteCapacity); } } + + public CSQueueMetricsForCustomResources + getCsQueueMetricsForCustomResources() { + return csQueueMetricsForCustomResources; + } } 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/CapacitySchedulerPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java index 8212a728e4f..372911aa32b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/CapacitySchedulerPage.java @@ -173,7 +173,12 @@ private void renderQueueCapacityInfo(ResponseInfo ri, String label) { .equals(Resources.none())) ? "unlimited" : capacities.getConfiguredMaxResource().toString()) - .__("Effective Capacity:", + .__("Effective Capacity:", (lqinfo.getCustomResources() != null + && label.equals("")) ? + appendPercentWithCustomResources(capacities. + getEffectiveMinResource(), + capacities.getCapacity() / 100, + lqinfo.getCustomResources().getGuaranteedCapacity()) : appendPercent(capacities.getEffectiveMinResource(), capacities.getCapacity() / 100)) .__("Effective Max Capacity:", @@ -676,6 +681,28 @@ static String appendPercent(ResourceInfo resourceInfo, float f) { + StringUtils.formatPercent(f, 1) + ")"; } + static String appendPercentWithCustomResources(ResourceInfo resourceInfo, + float f, Map resMap) { + if (resourceInfo == null) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + sb.append(" entry : resMap.entrySet()) { + String resourceName = entry.getKey(); + Long resourceValue = entry.getValue(); + sb.append(", ").append(resourceName).append(":").append(resourceValue); + } + } + sb.append(">"); + return sb + " (" + + StringUtils.formatPercent(f, 1) + ")"; + } + static String percent(float f) { return StringUtils.formatPercent(f, 1); } 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/CapacitySchedulerQueueInfo.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/CapacitySchedulerQueueInfo.java index 3865cce909f..b62e5dcdf67 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/CapacitySchedulerQueueInfo.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/CapacitySchedulerQueueInfo.java @@ -34,14 +34,11 @@ import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.security.AccessType; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.CSQueueMetricsForCustomResources; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueResourceQuotas; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceUsage; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CSQueue; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.ParentQueue; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.PlanQueue; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueueCapacities; +import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.*; + import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.helper.CapacitySchedulerInfoHelper; import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity. @@ -91,6 +88,7 @@ protected String queueType; protected String creationMethod; protected String autoCreationEligibility; + protected CSQueueMetricsForCustomResources customResources; CapacitySchedulerQueueInfo() { }; @@ -100,7 +98,9 @@ queuePath = q.getQueuePath(); capacity = q.getCapacity() * 100; usedCapacity = q.getUsedCapacity() * 100; - + customResources = + ((AbstractCSQueue)q).getMetrics(). + getCsQueueMetricsForCustomResources(); maxCapacity = q.getMaximumCapacity(); if (maxCapacity < EPSILON || maxCapacity > 1f) maxCapacity = 1f; @@ -335,4 +335,9 @@ public float getWeight() { public float getNormalizedWeight() { return normalizedWeight; } + + public CSQueueMetricsForCustomResources + getCustomResources() { + return customResources; + } }