Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java (revision 1528266) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java (working copy) @@ -49,9 +49,12 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerState; import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; +import org.apache.hadoop.yarn.server.nodemanager.webapp.dao.AppInfo; import org.apache.hadoop.yarn.server.security.ApplicationACLsManager; import org.apache.hadoop.yarn.server.utils.BuilderUtils; import org.apache.hadoop.yarn.util.ConverterUtils; +import org.apache.hadoop.yarn.util.StringHelper; +import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -114,8 +117,19 @@ healthChecker.stop(); } } - + @Test + public void testClusterAppUrl() { + Configuration nmConf = new YarnConfiguration(); + AppInfo info = mock(AppInfo.class); + final String appId = "1379364109210_0001"; + when(info.getId()).thenReturn(appId); + Assert.assertEquals("Cluster App URL is not correct generated", + StringHelper.pjoin(WebAppUtils.getRMWebAppURLWithScheme(nmConf), "cluster", "app", info.getId()), + WebAppUtils.getRMWebAppURLWithScheme(nmConf) + "/cluster/app/" + appId); + } + + @Test public void testNMWebAppWithOutPort() throws IOException { int port = startNMWebAppServer("0.0.0.0"); validatePortVal(port); Index: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ApplicationPage.java =================================================================== --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ApplicationPage.java (revision 1528266) +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/ApplicationPage.java (working copy) @@ -31,10 +31,12 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application; import org.apache.hadoop.yarn.server.nodemanager.webapp.dao.AppInfo; import org.apache.hadoop.yarn.util.ConverterUtils; +import org.apache.hadoop.yarn.util.StringHelper; import org.apache.hadoop.yarn.webapp.SubView; import org.apache.hadoop.yarn.webapp.YarnWebParams; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet; import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE; +import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import org.apache.hadoop.yarn.webapp.view.HtmlBlock; import org.apache.hadoop.yarn.webapp.view.InfoBlock; @@ -73,7 +75,6 @@ this.recordFactory = RecordFactoryProvider.getRecordFactory(this.conf); } - @Override protected void render(Block html) { ApplicationId applicationID = ConverterUtils.toApplicationId(this.recordFactory, @@ -81,7 +82,8 @@ Application app = this.nmContext.getApplications().get(applicationID); AppInfo info = new AppInfo(app); info("Application's information") - ._("ApplicationId", info.getId()) + ._("ApplicationId", StringHelper.pjoin( + WebAppUtils.getRMWebAppURLWithScheme(conf), "cluster", "app", info.getId()), info.getId()) ._("ApplicationState", info.getState()) ._("User", info.getUser()); TABLE containersListBody = html._(InfoBlock.class)