diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/HsNavBlock.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/HsNavBlock.java index 9ef5a0f8cff..df248fff79b 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/HsNavBlock.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/HsNavBlock.java @@ -18,8 +18,11 @@ package org.apache.hadoop.mapreduce.v2.hs.webapp; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.v2.app.webapp.App; import org.apache.hadoop.mapreduce.v2.util.MRApps; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.webapp.WebPageUtils; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet.DIV; import org.apache.hadoop.yarn.webapp.view.HtmlBlock; @@ -64,12 +67,15 @@ li().a(url("taskcounters", taskid), "Counters").__().__(); } } - nav. - h3("Tools"). - ul(). - li().a("/conf", "Configuration").__(). - li().a("/logs", "Local logs").__(). - li().a("/stacks", "Server stacks").__(). - li().a("/jmx?qry=Hadoop:*", "Server metrics").__().__().__(); + + Configuration conf = new YarnConfiguration(); + + boolean showTools = conf.getBoolean( + YarnConfiguration.YARN_WEBAPP_UI1_ENABLE_TOOLS, true); + Hamlet.UL> tools = WebPageUtils.appendToolSection(nav, showTools); + + if (tools != null) { + tools.__().__(); + } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index 156943c7f6b..5170f6b7f71 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -361,6 +361,8 @@ private static void addDeprecatedKeys() { + "webapp.ui2.war-file-path"; public static final String YARN_API_SERVICES_ENABLE = "yarn." + "webapp.api-service.enable"; + public static final String YARN_WEBAPP_UI1_ENABLE_TOOLS = "yarn." + + "webapp.ui1.tools.enable"; @Private public static final String DEFAULT_YARN_API_SYSTEM_SERVICES_CLASS = diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml index 1507296e146..d0fc1d63721 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml @@ -256,6 +256,12 @@ false + + Enable tools section in all ui1 webapp. + yarn.webapp.ui1.tools.enable + true + + Explicitly provide WAR file path for ui2 if needed. diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/NavBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/NavBlock.java index 915af4a9969..1f206f8ceaa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/NavBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/NavBlock.java @@ -18,7 +18,10 @@ package org.apache.hadoop.yarn.server.applicationhistoryservice.webapp; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.api.records.YarnApplicationState; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.webapp.WebPageUtils; import org.apache.hadoop.yarn.util.Log4jWarningErrorMetricsAppender; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet; import org.apache.hadoop.yarn.webapp.view.HtmlBlock; @@ -61,11 +64,15 @@ public void render(Block html) { __(). __(); - Hamlet.UL> tools = nav.h3("Tools").ul(); - tools.li().a("/conf", "Configuration").__() - .li().a("/logs", "Local logs").__() - .li().a("/stacks", "Server stacks").__() - .li().a("/jmx?qry=Hadoop:*", "Server metrics").__(); + Configuration conf = new YarnConfiguration(); + + boolean showTools = conf.getBoolean( + YarnConfiguration.YARN_WEBAPP_UI1_ENABLE_TOOLS, true); + Hamlet.UL> tools = WebPageUtils.appendToolSection(nav, showTools); + + if (tools == null) { + return; + } if (addErrorsAndWarningsLink) { tools.li().a(url("errors-and-warnings"), "Errors/Warnings").__(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java index cf4e020d35e..7466fac88d3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java @@ -18,6 +18,8 @@ package org.apache.hadoop.yarn.server.webapp; +import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet; + import static org.apache.hadoop.yarn.webapp.view.JQueryUI.tableInit; @@ -112,4 +114,29 @@ public static String resourceRequestsTableInit() { .toString(); } + /** + * Creates the tool section after a closed section. If it is not enabled, + * the section is created without any links. + * @param section a closed HTML div section + * @param isToolsEnabled whether the tools section is enabled + * @return the tool section, if it is enabled, null otherwise + */ + public static Hamlet.UL> appendToolSection(Hamlet.DIV section, + boolean isToolsEnabled) { + Hamlet.DIV tools = null; + Hamlet.UL> enabledTools = null; + + if (isToolsEnabled) { + tools = section.h3("Tools"); + enabledTools = tools.ul().li().a("/conf", "Configuration").__(). + li().a("/logs", "Local logs").__(). + li().a("/stacks", "Server stacks").__(). + li().a("/jmx?qry=Hadoop:*", "Server metrics").__(); + } else { + section.h4("Tools (DISABLED)").__(); + } + + return enabledTools; + } + } \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NavBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NavBlock.java index 5cbcff5ee0d..6f645eedba5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NavBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/NavBlock.java @@ -19,6 +19,8 @@ package org.apache.hadoop.yarn.server.nodemanager.webapp; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.webapp.WebPageUtils; import org.apache.hadoop.yarn.util.Log4jWarningErrorMetricsAppender; import org.apache.hadoop.yarn.webapp.YarnWebParams; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet; @@ -51,7 +53,7 @@ protected void render(Block html) { String RMWebAppURL = WebAppUtils.getResolvedRMWebAppURLWithScheme(this.conf); - Hamlet.UL> ul = html + Hamlet.DIV ul = html .div("#nav") .h3().__("ResourceManager").__() .ul() @@ -65,17 +67,21 @@ protected void render(Block html) { .__() .li() .a(url("allContainers"), "List of Containers").__() - .__() - .h3("Tools") - .ul() - .li().a("/conf", "Configuration").__() - .li().a("/logs", "Local logs").__() - .li().a("/stacks", "Server stacks").__() - .li().a("/jmx?qry=Hadoop:*", "Server metrics").__(); + .__(); + + Configuration conf = new YarnConfiguration(); + + boolean showTools = conf.getBoolean( + YarnConfiguration.YARN_WEBAPP_UI1_ENABLE_TOOLS, true); + Hamlet.UL> tools = WebPageUtils.appendToolSection(ul, showTools); + + if (tools == null) { + return; + } if (addErrorsAndWarningsLink) { - ul.li().a(url("errors-and-warnings"), "Errors/Warnings").__(); + tools.li().a(url("errors-and-warnings"), "Errors/Warnings").__(); } - ul.__().__(); + tools.__().__(); } } 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/NavBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java index 3107644f640..ce384ea743b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java @@ -18,7 +18,10 @@ package org.apache.hadoop.yarn.server.resourcemanager.webapp; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.yarn.api.records.YarnApplicationState; +import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.server.webapp.WebPageUtils; import org.apache.hadoop.yarn.util.Log4jWarningErrorMetricsAppender; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet; import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet.DIV; @@ -55,13 +58,18 @@ li().a(url("apps", state.toString()), state.toString()).__(); } subAppsList.__().__(); - UL> tools = mainList. - li().a(url("scheduler"), "Scheduler").__().__(). - h3("Tools").ul(); - tools.li().a("/conf", "Configuration").__(). - li().a("/logs", "Local logs").__(). - li().a("/stacks", "Server stacks").__(). - li().a("/jmx?qry=Hadoop:*", "Server metrics").__(); + Configuration conf = new YarnConfiguration(); + + boolean showTools = conf.getBoolean( + YarnConfiguration.YARN_WEBAPP_UI1_ENABLE_TOOLS, true); + DIV sectionBefore = mainList. + li().a(url("scheduler"), "Scheduler").__().__(); + + UL> tools = WebPageUtils.appendToolSection(sectionBefore, showTools); + + if (tools == null) { + return; + } if (addErrorsAndWarningsLink) { tools.li().a(url("errors-and-warnings"), "Errors/Warnings").__();