diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java index eae8889..77deaed 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java @@ -114,12 +114,6 @@ public void setup() { bind(NMWebServices.class); bind(GenericExceptionHandler.class); bind(JAXBContextResolver.class); - // host the timeline service aggregator web service temporarily - // (see YARN-3087) - bind(PerNodeAggregatorWebService.class); - // bind to the global singleton instance - bind(AppLevelServiceManager.class). - toProvider(AppLevelServiceManagerProvider.class); bind(ResourceView.class).toInstance(this.resourceView); bind(ApplicationACLsManager.class).toInstance(this.aclsManager); bind(LocalDirsHandlerService.class).toInstance(dirsHandler); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorServer.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorServer.java index 6371e82..9ff60fe 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorServer.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorServer.java @@ -18,6 +18,7 @@ package org.apache.hadoop.yarn.server.timelineservice.aggregator; +import java.net.URI; import java.nio.ByteBuffer; import org.apache.commons.logging.Log; @@ -39,10 +40,8 @@ import org.apache.hadoop.yarn.server.api.ContainerContext; import org.apache.hadoop.yarn.server.api.ContainerInitializationContext; import org.apache.hadoop.yarn.server.api.ContainerTerminationContext; -import org.apache.hadoop.yarn.webapp.WebApp; -import org.apache.hadoop.yarn.webapp.WebApps; -import org.apache.hadoop.yarn.webapp.YarnWebParams; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; +import org.apache.hadoop.http.HttpServer2; import com.google.common.annotations.VisibleForTesting; @@ -57,9 +56,10 @@ private static final Log LOG = LogFactory.getLog(PerNodeAggregatorServer.class); private static final int SHUTDOWN_HOOK_PRIORITY = 30; + static final String AGGREGATOR_COLLECTION_ATTR_KEY = "aggregator.collection"; private final AppLevelServiceManager serviceManager; - private WebApp webApp; + private HttpServer2 timelineRestServer; public PerNodeAggregatorServer() { // use the same singleton @@ -87,8 +87,8 @@ protected void serviceStart() throws Exception { @Override protected void serviceStop() throws Exception { - if (webApp != null) { - webApp.stop(); + if (timelineRestServer != null) { + timelineRestServer.stop(); } // stop the service manager serviceManager.stop(); @@ -104,11 +104,19 @@ private void startWebApp() { WebAppUtils.getAHSWebAppURLWithoutScheme(conf)); LOG.info("Instantiating the per-node aggregator webapp at " + bindAddress); try { - webApp = - WebApps - .$for("timeline", null, null, "ws") - .with(conf).at(bindAddress).start( - new TimelineServiceWebApp()); + Configuration confForInfoServer = new Configuration(conf); + confForInfoServer.setInt(HttpServer2.HTTP_MAX_THREADS, 10); + HttpServer2.Builder builder = new HttpServer2.Builder() + .setName("timeline_aggregator") + .setConf(conf) + .addEndpoint(URI.create("http://" + bindAddress)); + timelineRestServer = builder.build(); + timelineRestServer.addJerseyResourcePackage( + PerNodeAggregatorWebService.class.getPackage().getName(), + "/*"); + timelineRestServer.setAttribute(AGGREGATOR_COLLECTION_ATTR_KEY, + AppLevelServiceManager.getInstance()); + timelineRestServer.start(); } catch (Exception e) { String msg = "The per-node aggregator webapp failed to start."; LOG.error(msg, e); @@ -116,17 +124,6 @@ private void startWebApp() { } } - private static class TimelineServiceWebApp - extends WebApp implements YarnWebParams { - @Override - public void setup() { - bind(PerNodeAggregatorWebService.class); - // bind to the global singleton - bind(AppLevelServiceManager.class). - toProvider(AppLevelServiceManagerProvider.class); - } - } - // these methods can be used as the basis for future service methods if the // per-node aggregator runs separate from the node manager /** diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorWebService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorWebService.java index 2d96699..979e7de 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorWebService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/aggregator/PerNodeAggregatorWebService.java @@ -18,6 +18,7 @@ package org.apache.hadoop.yarn.server.timelineservice.aggregator; +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; @@ -45,7 +46,6 @@ import org.apache.hadoop.yarn.webapp.ForbiddenException; import org.apache.hadoop.yarn.webapp.NotFoundException; -import com.google.inject.Inject; import com.google.inject.Singleton; /** @@ -61,12 +61,7 @@ private static final Log LOG = LogFactory.getLog(PerNodeAggregatorWebService.class); - private final AppLevelServiceManager serviceManager; - - @Inject - public PerNodeAggregatorWebService(AppLevelServiceManager serviceManager) { - this.serviceManager = serviceManager; - } + private @Context ServletContext context; @XmlRootElement(name = "about") @XmlAccessorType(XmlAccessType.NONE) @@ -144,6 +139,9 @@ public TimelinePutResponse postEntities( private AppLevelAggregatorService getAggregatorService(HttpServletRequest req) { String appIdString = getApplicationId(req); + final AppLevelServiceManager serviceManager = + (AppLevelServiceManager) context.getAttribute( + PerNodeAggregatorServer.AGGREGATOR_COLLECTION_ATTR_KEY); return serviceManager.getService(appIdString); } diff --git hadoop-yarn-project/pom.xml hadoop-yarn-project/pom.xml index 01f7cd0..85467a3 100644 --- hadoop-yarn-project/pom.xml +++ hadoop-yarn-project/pom.xml @@ -82,6 +82,18 @@ maven-antrun-plugin + + create-web-app-dirs + compile + + run + + + + + + + tar package