浏览代码

YARN-10588. Percentage of queue and cluster is zero in WebUI . Contributed by Bilwa S T

(cherry picked from commit aa4c17b9d7af122163789a731ced05f740562e45)
Eric Payne 4 年之前
父节点
当前提交
5617bfa0d4

+ 5 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DefaultResourceCalculator.java

@@ -150,4 +150,9 @@ public class DefaultResourceCalculator extends ResourceCalculator {
   public boolean isAnyMajorResourceAboveZero(Resource resource) {
   public boolean isAnyMajorResourceAboveZero(Resource resource) {
     return resource.getMemorySize() > 0;
     return resource.getMemorySize() > 0;
   }
   }
+
+  @Override
+  public boolean isAllInvalidDivisor(Resource r) {
+    return isInvalidDivisor(r);
+  }
 }
 }

+ 1 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java

@@ -384,6 +384,7 @@ public class DominantResourceCalculator extends ResourceCalculator {
     return false;
     return false;
   }
   }
 
 
+  @Override
   public boolean isAllInvalidDivisor(Resource r) {
   public boolean isAllInvalidDivisor(Resource r) {
     boolean flag = true;
     boolean flag = true;
     for (ResourceInformation res : r.getResources()) {
     for (ResourceInformation res : r.getResources()) {

+ 9 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceCalculator.java

@@ -205,6 +205,15 @@ public abstract class ResourceCalculator {
    */
    */
   public abstract boolean isInvalidDivisor(Resource r);
   public abstract boolean isInvalidDivisor(Resource r);
 
 
+
+  /**
+   * Determine if all resources are zero.
+   *
+   * @param r resource
+   * @return true if all divisors are invalid (should not be used), false else
+   */
+  public abstract boolean isAllInvalidDivisor(Resource r);
+
   /**
   /**
    * Ratio of resource <code>a</code> to resource <code>b</code>.
    * Ratio of resource <code>a</code> to resource <code>b</code>.
    * 
    * 

+ 1 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerApplicationAttempt.java

@@ -1125,7 +1125,7 @@ public class SchedulerApplicationAttempt implements SchedulableEntity {
           .put(ResourceInformation.VCORES.getName(), 0L);
           .put(ResourceInformation.VCORES.getName(), 0L);
       float queueUsagePerc = 0.0f;
       float queueUsagePerc = 0.0f;
       float clusterUsagePerc = 0.0f;
       float clusterUsagePerc = 0.0f;
-      if (!calc.isInvalidDivisor(cluster)) {
+      if (!calc.isAllInvalidDivisor(cluster)) {
         float queueCapacityPerc = queue.getQueueInfo(false, false)
         float queueCapacityPerc = queue.getQueueInfo(false, false)
             .getCapacity();
             .getCapacity();
         queueUsagePerc = calc.divide(cluster, usedResourceClone,
         queueUsagePerc = calc.divide(cluster, usedResourceClone,

+ 1 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/common/fica/FiCaSchedulerApp.java

@@ -1123,7 +1123,7 @@ public class FiCaSchedulerApp extends SchedulerApplicationAttempt {
       ResourceCalculator calc =
       ResourceCalculator calc =
           rmContext.getScheduler().getResourceCalculator();
           rmContext.getScheduler().getResourceCalculator();
       float queueUsagePerc = 0.0f;
       float queueUsagePerc = 0.0f;
-      if (!calc.isInvalidDivisor(totalPartitionRes)) {
+      if (!calc.isAllInvalidDivisor(totalPartitionRes)) {
         Resource effCap = ((AbstractCSQueue) getQueue())
         Resource effCap = ((AbstractCSQueue) getQueue())
             .getEffectiveCapacity(getAppAMNodePartitionName());
             .getEffectiveCapacity(getAppAMNodePartitionName());
         if (!effCap.equals(Resources.none())) {
         if (!effCap.equals(Resources.none())) {