diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 2744bb4..5e9c328 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -29,15 +29,19 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ha.HAServiceProtocol; import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; +import org.apache.hadoop.http.HttpConfig; +import org.apache.hadoop.http.HttpServer2; import org.apache.hadoop.http.lib.StaticUserWebFilter; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.source.JvmMetrics; +import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.security.AuthenticationFilterInitializer; import org.apache.hadoop.security.Groups; import org.apache.hadoop.security.HttpCrossOriginFilterInitializer; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler; +import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.security.authorize.ProxyUsers; import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.service.CompositeService; @@ -113,6 +117,7 @@ import java.io.InputStream; import java.io.PrintStream; import java.net.InetSocketAddress; +import java.net.URI; import java.nio.charset.Charset; import java.security.PrivilegedExceptionAction; import java.security.SecureRandom; @@ -959,6 +964,41 @@ public void handle(RMNodeEvent event) { } } } + + /** + * Return a HttpServer.Builder that the journalnode / namenode / secondary + * namenode can use to initialize their HTTP / HTTPS server. + * + */ + public static HttpServer2.Builder httpServerTemplateForRM( + Configuration conf, final InetSocketAddress httpAddr, + final InetSocketAddress httpsAddr, String name) throws IOException { + HttpServer2.Builder builder = new HttpServer2.Builder().setName(name) + .setConf(conf).setSecurityEnabled(false); + + if (httpAddr.getPort() == 0) { + builder.setFindPort(true); + } + + URI uri = URI.create("http://" + NetUtils.getHostPortString(httpAddr)); + builder.addEndpoint(uri); + LOG.info("Starting Web-server for " + name + " at: " + uri); + + return builder; + } + + protected void startWebAppV2() throws IOException { + final InetSocketAddress httpAddr = new InetSocketAddress("localhost", 8888); + final InetSocketAddress httpsAddr = new InetSocketAddress("localhost", 8889); + + HttpServer2.Builder builder = httpServerTemplateForRM(conf, httpAddr, + httpsAddr, "rm"); + + HttpServer2 infoServer = builder.build(); + infoServer.start(); + + LOG.info("Web server init done"); + } protected void startWepApp() { @@ -1174,6 +1214,15 @@ protected void serviceStart() throws Exception { } startWepApp(); + + try { + startWebAppV2(); + LOG.info("started web app v2"); + } catch (Exception e) { + LOG.error("failed to start web app v2"); + } + + if (getConfig().getBoolean(YarnConfiguration.IS_MINI_YARN_CLUSTER, false)) { int port = webApp.port();