diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java index 6ce47de..286e21f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -361,7 +361,7 @@ public NodesInfo getNodes(@QueryParam(RMWSConsts.STATES) String states) { } EnumSet acceptedStates; - if (states == null) { + if (states == null || states.isEmpty()) { acceptedStates = EnumSet.allOf(NodeState.class); } else { acceptedStates = EnumSet.noneOf(NodeState.class); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/Router.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/Router.java index 121e534..80eea4d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/Router.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/Router.java @@ -19,6 +19,8 @@ package org.apache.hadoop.yarn.server.router; import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hadoop.classification.InterfaceAudience.Private; @@ -26,6 +28,7 @@ import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.util.ShutdownHookManager; import org.apache.hadoop.util.StringUtils; +import org.apache.hadoop.util.VersionInfo; import org.apache.hadoop.yarn.YarnUncaughtExceptionHandler; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; @@ -37,6 +40,7 @@ import org.apache.hadoop.yarn.webapp.WebApps; import org.apache.hadoop.yarn.webapp.WebApps.Builder; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; +import org.eclipse.jetty.webapp.WebAppContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,6 +64,7 @@ public class Router extends CompositeService { private static final Logger LOG = LoggerFactory.getLogger(Router.class); + private static final String UI2_WEBAPP_NAME = "/ui2"; private static CompositeServiceShutdownHook routerShutdownHook; private Configuration conf; private AtomicBoolean isStopping = new AtomicBoolean(false); @@ -149,7 +154,44 @@ public void startWepApp() { Builder builder = WebApps.$for("cluster", null, null, "ws").with(conf).at(webAppAddress); - webApp = builder.start(new RouterWebApp(this)); + WebAppContext uiWebAppContext = null; + String onDiskPath = + getConfig().get(YarnConfiguration.YARN_WEBAPP_UI2_WARFILE_PATH); + + uiWebAppContext = new WebAppContext(); + uiWebAppContext.setContextPath(UI2_WEBAPP_NAME); + + if (null == onDiskPath) { + String war = "hadoop-yarn-ui-" + VersionInfo.getVersion() + ".war"; + URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader(); + URL url = cl.findResource(war); + + if (null == url) { + onDiskPath = getWebAppsPath("ui2"); + } else { + onDiskPath = url.getFile(); + } + } + if (onDiskPath == null || onDiskPath.isEmpty()) { + LOG.error("No war file or webapps found for federation !"); + } else { + if (onDiskPath.endsWith(".war")) { + uiWebAppContext.setWar(onDiskPath); + LOG.info("Using war file at: " + onDiskPath); + } else { + uiWebAppContext.setResourceBase(onDiskPath); + LOG.info("Using webapps at: " + onDiskPath); + } + } + webApp = builder.start(new RouterWebApp(this), uiWebAppContext); + } + + private String getWebAppsPath(String appName) { + URL url = getClass().getClassLoader().getResource("webapps/" + appName); + if (url == null) { + return ""; + } + return url.toString(); } public static void main(String[] argv) {