Browse Source

YARN-8625. Aggregate Resource Allocation for each job is not present in ATS. Contributed by Prabhu Joseph.

Eric E Payne 6 years ago
parent
commit
8756254c6d

+ 5 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebServices.java

@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.applicationhistoryservice.webapp;
 package org.apache.hadoop.yarn.server.applicationhistoryservice.webapp;
 
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 import static org.junit.Assert.fail;
 
 
 import java.util.Arrays;
 import java.util.Arrays;
@@ -352,6 +353,10 @@ public class TestAHSWebServices extends JerseyTestBase {
     assertEquals(FinalApplicationStatus.UNDEFINED.toString(),
     assertEquals(FinalApplicationStatus.UNDEFINED.toString(),
       app.get("finalAppStatus"));
       app.get("finalAppStatus"));
     assertEquals(YarnApplicationState.FINISHED.toString(), app.get("appState"));
     assertEquals(YarnApplicationState.FINISHED.toString(), app.get("appState"));
+    assertNotNull("Aggregate resource allocation is null",
+        app.get("aggregateResourceAllocation"));
+    assertNotNull("Aggregate Preempted Resource Allocation is null",
+        app.get("aggregatePreemptedResourceAllocation"));
   }
   }
 
 
   @Test
   @Test

+ 25 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppInfo.java

@@ -28,6 +28,7 @@ import org.apache.hadoop.classification.InterfaceAudience.Public;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 
 import org.apache.hadoop.yarn.api.records.ApplicationReport;
 import org.apache.hadoop.yarn.api.records.ApplicationReport;
+import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.api.records.YarnApplicationState;
 import org.apache.hadoop.yarn.util.Times;
 import org.apache.hadoop.yarn.util.Times;
@@ -64,6 +65,8 @@ public class AppInfo {
   protected boolean unmanagedApplication;
   protected boolean unmanagedApplication;
   private String appNodeLabelExpression;
   private String appNodeLabelExpression;
   private String amNodeLabelExpression;
   private String amNodeLabelExpression;
+  private String aggregateResourceAllocation;
+  private String aggregatePreemptedResourceAllocation;
 
 
   public AppInfo() {
   public AppInfo() {
     // JAXB needs this
     // JAXB needs this
@@ -93,15 +96,21 @@ public class AppInfo {
     if (app.getPriority() != null) {
     if (app.getPriority() != null) {
       priority = app.getPriority().getPriority();
       priority = app.getPriority().getPriority();
     }
     }
-    if (app.getApplicationResourceUsageReport() != null) {
-      runningContainers = app.getApplicationResourceUsageReport()
-          .getNumUsedContainers();
-      if (app.getApplicationResourceUsageReport().getUsedResources() != null) {
-        allocatedCpuVcores = app.getApplicationResourceUsageReport()
-            .getUsedResources().getVirtualCores();
-        allocatedMemoryMB = app.getApplicationResourceUsageReport()
-            .getUsedResources().getMemorySize();
+    ApplicationResourceUsageReport usageReport =
+        app.getApplicationResourceUsageReport();
+
+    if (usageReport != null) {
+      runningContainers = usageReport.getNumUsedContainers();
+      if (usageReport.getUsedResources() != null) {
+        allocatedCpuVcores = usageReport.getUsedResources().getVirtualCores();
+        allocatedMemoryMB = usageReport.getUsedResources().getMemorySize();
       }
       }
+      aggregateResourceAllocation = usageReport.getMemorySeconds()
+          + " MB-seconds, " + usageReport.getVcoreSeconds()
+          + " vcore-seconds";
+      aggregatePreemptedResourceAllocation = usageReport.
+          getPreemptedMemorySeconds() + " MB-seconds, " +
+          usageReport.getPreemptedVcoreSeconds() + " vcore-seconds";
     }
     }
     progress = app.getProgress() * 100; // in percent
     progress = app.getProgress() * 100; // in percent
     if (app.getApplicationTags() != null && !app.getApplicationTags().isEmpty()) {
     if (app.getApplicationTags() != null && !app.getApplicationTags().isEmpty()) {
@@ -215,4 +224,12 @@ public class AppInfo {
   public String getAmNodeLabelExpression() {
   public String getAmNodeLabelExpression() {
     return amNodeLabelExpression;
     return amNodeLabelExpression;
   }
   }
+
+  public String getAggregateResourceAllocation() {
+    return aggregateResourceAllocation;
+  }
+
+  public String getAggregatePreemptedResourceAllocation() {
+    return aggregatePreemptedResourceAllocation;
+  }
 }
 }