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/AppInfo.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/AppInfo.java index c5c02a806de..be0b87f261d 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/AppInfo.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/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 AppInfo(ResourceManager rm, RMApp app, Boolean hasAccess, 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 String getAMHostHttpAddress() { 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; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java index 9ba5233f6d1..04fc1616545 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java @@ -45,6 +45,7 @@ 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.JerseyTestBase; import org.apache.hadoop.yarn.webapp.WebServicesTestUtils; @@ -1316,7 +1317,8 @@ public void verifyAppsXML(NodeList nodes, RMApp app) throws JSONException, WebServicesTestUtils.getXmlString(element, "logAggregationStatus"), WebServicesTestUtils.getXmlBoolean(element, "unmanagedApplication"), WebServicesTestUtils.getXmlString(element, "appNodeLabelExpression"), - WebServicesTestUtils.getXmlString(element, "amNodeLabelExpression")); + WebServicesTestUtils.getXmlString(element, "amNodeLabelExpression"), + WebServicesTestUtils.getXmlString(element, "amRPCAddress")); } } @@ -1335,6 +1337,12 @@ public void verifyAppInfo(JSONObject info, RMApp app) throws JSONException, 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()); @@ -1357,7 +1365,8 @@ public void verifyAppInfo(JSONObject info, RMApp app) throws JSONException, info.getString("logAggregationStatus"), info.getBoolean("unmanagedApplication"), appNodeLabelExpression, - amNodeLabelExpression); + amNodeLabelExpression, + amRPCAddress); } public void verifyAppInfoGeneric(RMApp app, String id, String user, @@ -1370,9 +1379,8 @@ public void verifyAppInfoGeneric(RMApp app, String id, String user, 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); @@ -1433,6 +1441,9 @@ public void verifyAppInfoGeneric(RMApp app, String id, String user, assertEquals("unmanagedApplication doesn't match", app.getAMResourceRequest().getNodeLabelExpression(), amNodeLabelExpression); + assertEquals("amRPCAddress", + AppInfo.getAmRPCAddressFromRMAppAttempt(app.getCurrentAppAttempt()), + amRPCAddress); } @Test diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md index 1b771275197..5862506755c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md +++ b/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: 25196 http://host.domain.com:8042/node/containerlogs/container_1326815542473_0001_01_000001 host.domain.com:8042 + host.domain.com:4201 0 0 0 @@ -1501,6 +1504,7 @@ Response Body: 148166 http://host.domain.com:8042/node/containerlogs/container_1326815542473_0002_01_000001 host.domain.com:8042 + host.domain.com:4202 0 0 0 @@ -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: 446748 http://host.domain.com:8042/node/containerlogs/container_1326821518301_0005_01_000001 host.domain.com:8042 + host.domain.com:4201 151730 103 false