Forráskód Böngészése

YARN-5286. Add RPC port info in RM web service's response when getting app status. (Jun Gong via Varun Saxena).

Varun Saxena 8 éve
szülő
commit
8e672e3c71

+ 20 - 1
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java

@@ -82,6 +82,7 @@ public class AppInfo {
   protected long elapsedTime;
   protected String amContainerLogs;
   protected String amHostHttpAddress;
+  private String amRPCAddress;
   protected long allocatedMB;
   protected long allocatedVCores;
   protected int runningContainers;
@@ -168,7 +169,9 @@ public class AppInfo {
                 masterContainer.getId().toString(), app.getUser());
             this.amHostHttpAddress = masterContainer.getNodeHttpAddress();
           }
-          
+
+          this.amRPCAddress = getAmRPCAddressFromRMAppAttempt(attempt);
+
           ApplicationResourceUsageReport resourceReport = attempt
               .getApplicationResourceUsageReport();
           if (resourceReport != null) {
@@ -281,6 +284,22 @@ public class AppInfo {
     return this.amHostHttpAddress;
   }
 
+  public String getAmRPCAddress() {
+    return amRPCAddress;
+  }
+
+  static public String getAmRPCAddressFromRMAppAttempt(RMAppAttempt attempt) {
+    String amRPCAddress = null;
+    if (attempt != null) {
+      String amHost = attempt.getHost();
+      int amRpcPort = attempt.getRpcPort();
+      if (!"N/A".equals(amHost) && amRpcPort != -1) {
+        amRPCAddress = amHost + ":" + amRpcPort;
+      }
+    }
+    return amRPCAddress;
+  }
+
   public boolean amContainerLogsExist() {
     return this.amContainerLogsExist;
   }

+ 16 - 5
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java

@@ -46,6 +46,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.GuiceServletConfig;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
@@ -1319,7 +1320,8 @@ public class TestRMWebServicesApps extends JerseyTestBase {
           WebServicesTestUtils.getXmlString(element, "logAggregationStatus"),
           WebServicesTestUtils.getXmlBoolean(element, "unmanagedApplication"),
           WebServicesTestUtils.getXmlString(element, "appNodeLabelExpression"),
-          WebServicesTestUtils.getXmlString(element, "amNodeLabelExpression"));
+          WebServicesTestUtils.getXmlString(element, "amNodeLabelExpression"),
+          WebServicesTestUtils.getXmlString(element, "amRPCAddress"));
     }
   }
 
@@ -1338,6 +1340,12 @@ public class TestRMWebServicesApps extends JerseyTestBase {
       expectedNumberOfElements++;
       amNodeLabelExpression = info.getString("amNodeLabelExpression");
     }
+    String amRPCAddress = null;
+    if (AppInfo.getAmRPCAddressFromRMAppAttempt(app.getCurrentAppAttempt())
+        != null) {
+      expectedNumberOfElements++;
+      amRPCAddress = info.getString("amRPCAddress");
+    }
     assertEquals("incorrect number of elements", expectedNumberOfElements,
         info.length());
 
@@ -1360,7 +1368,8 @@ public class TestRMWebServicesApps extends JerseyTestBase {
         info.getString("logAggregationStatus"),
         info.getBoolean("unmanagedApplication"),
         appNodeLabelExpression,
-        amNodeLabelExpression);
+        amNodeLabelExpression,
+        amRPCAddress);
   }
 
   public void verifyAppInfoGeneric(RMApp app, String id, String user,
@@ -1373,9 +1382,8 @@ public class TestRMWebServicesApps extends JerseyTestBase {
       int preemptedResourceMB, int preemptedResourceVCores,
       int numNonAMContainerPreempted, int numAMContainerPreempted,
       String logAggregationStatus, boolean unmanagedApplication,
-      String appNodeLabelExpression, String amNodeLabelExpression)
-      throws JSONException,
-      Exception {
+      String appNodeLabelExpression, String amNodeLabelExpression,
+      String amRPCAddress) throws JSONException, Exception {
 
     WebServicesTestUtils.checkStringMatch("id", app.getApplicationId()
         .toString(), id);
@@ -1436,6 +1444,9 @@ public class TestRMWebServicesApps extends JerseyTestBase {
     assertEquals("unmanagedApplication doesn't match",
         app.getAMResourceRequest().getNodeLabelExpression(),
         amNodeLabelExpression);
+    assertEquals("amRPCAddress",
+        AppInfo.getAmRPCAddressFromRMAppAttempt(app.getCurrentAppAttempt()),
+        amRPCAddress);
   }
 
   @Test

+ 7 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md

@@ -1381,6 +1381,7 @@ Response Body:
           "clusterId" : 1326815542473,
           "finalStatus" : "SUCCEEDED",
           "amHostHttpAddress" : "host.domain.com:8042",
+          "amRPCAddress" : "host.domain.com:4201",
           "progress" : 100,
           "name" : "word count",
           "startedTime" : 1326815573334,
@@ -1410,6 +1411,7 @@ Response Body:
           "clusterId" : 1326815542473,
           "finalStatus" : "SUCCEEDED",
           "amHostHttpAddress" : "host.domain.com:8042",
+          "amRPCAddress" : "host.domain.com:4202",
           "progress" : 100,
           "name" : "Sleep job",
           "startedTime" : 1326815641380,
@@ -1472,6 +1474,7 @@ Response Body:
     <elapsedTime>25196</elapsedTime>
     <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1326815542473_0001_01_000001</amContainerLogs>
     <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
+    <amRPCAddress>host.domain.com:4201</amRPCAddress>
     <allocatedMB>0</allocatedMB>
     <allocatedVCores>0</allocatedVCores>
     <runningContainers>0</runningContainers>
@@ -1501,6 +1504,7 @@ Response Body:
     <elapsedTime>148166</elapsedTime>
     <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1326815542473_0002_01_000001</amContainerLogs>
     <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
+    <amRPCAddress>host.domain.com:4202</amRPCAddress>
     <allocatedMB>0</allocatedMB>
     <allocatedVCores>0</allocatedVCores>
     <runningContainers>0</runningContainers>
@@ -1664,6 +1668,7 @@ Note that depending on security settings a user might not be able to see all the
 | elapsedTime | long | The elapsed time since the application started (in ms) |
 | amContainerLogs | string | The URL of the application master container logs |
 | amHostHttpAddress | string | The nodes http address of the application master |
+| amRPCAddress | string | The RPC address of the application master |
 | allocatedMB | int | The sum of memory in MB allocated to the application's running containers |
 | allocatedVCores | int | The sum of virtual cores allocated to the application's running containers |
 | runningContainers | int | The number of containers currently running for the application |
@@ -1703,6 +1708,7 @@ Response Body:
       "clusterId" : 1326821518301,
       "finalStatus" : "SUCCEEDED",
       "amHostHttpAddress" : "host.domain.com:8042",
+      "amRPCAddress" : "host.domain.com:4201",
       "progress" : 100,
       "name" : "Sleep job",
       "applicationType" : "Yarn",
@@ -1756,6 +1762,7 @@ Response Body:
   <elapsedTime>446748</elapsedTime>
   <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1326821518301_0005_01_000001</amContainerLogs>
   <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
+  <amRPCAddress>host.domain.com:4201</amRPCAddress>
   <memorySeconds>151730</memorySeconds>
   <vcoreSeconds>103</vcoreSeconds>
   <unmanagedApplication>false</unmanagedApplication>