Search in sources :

Example 1 with AHSWebApp

use of org.apache.hadoop.yarn.server.applicationhistoryservice.webapp.AHSWebApp in project hadoop by apache.

the class ApplicationHistoryServer method startWebApp.

@SuppressWarnings("unchecked")
private void startWebApp() {
    Configuration conf = getConfig();
    TimelineAuthenticationFilter.setTimelineDelegationTokenSecretManager(secretManagerService.getTimelineDelegationTokenSecretManager());
    // Always load pseudo authentication filter to parse "user.name" in an URL
    // to identify a HTTP request's user in insecure mode.
    // When Kerberos authentication type is set (i.e., secure mode is turned on),
    // the customized filter will be loaded by the timeline server to do Kerberos
    // + DT authentication.
    String initializers = conf.get("hadoop.http.filter.initializers");
    boolean modifiedInitializers = false;
    initializers = initializers == null || initializers.length() == 0 ? "" : initializers;
    if (!initializers.contains(CrossOriginFilterInitializer.class.getName())) {
        if (conf.getBoolean(YarnConfiguration.TIMELINE_SERVICE_HTTP_CROSS_ORIGIN_ENABLED, YarnConfiguration.TIMELINE_SERVICE_HTTP_CROSS_ORIGIN_ENABLED_DEFAULT)) {
            if (initializers.contains(HttpCrossOriginFilterInitializer.class.getName())) {
                initializers = initializers.replaceAll(HttpCrossOriginFilterInitializer.class.getName(), CrossOriginFilterInitializer.class.getName());
            } else {
                if (initializers.length() != 0) {
                    initializers += ",";
                }
                initializers += CrossOriginFilterInitializer.class.getName();
            }
            modifiedInitializers = true;
        }
    }
    if (!initializers.contains(TimelineAuthenticationFilterInitializer.class.getName())) {
        if (initializers.length() != 0) {
            initializers += ",";
        }
        initializers += TimelineAuthenticationFilterInitializer.class.getName();
        modifiedInitializers = true;
    }
    String[] parts = initializers.split(",");
    ArrayList<String> target = new ArrayList<String>();
    for (String filterInitializer : parts) {
        filterInitializer = filterInitializer.trim();
        if (filterInitializer.equals(AuthenticationFilterInitializer.class.getName())) {
            modifiedInitializers = true;
            continue;
        }
        target.add(filterInitializer);
    }
    String actualInitializers = org.apache.commons.lang.StringUtils.join(target, ",");
    if (modifiedInitializers) {
        conf.set("hadoop.http.filter.initializers", actualInitializers);
    }
    String bindAddress = WebAppUtils.getWebAppBindURL(conf, YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, WebAppUtils.getAHSWebAppURLWithoutScheme(conf));
    try {
        AHSWebApp ahsWebApp = new AHSWebApp(timelineDataManager, ahsClientService);
        webApp = WebApps.$for("applicationhistory", ApplicationHistoryClientService.class, ahsClientService, "ws").with(conf).withAttribute(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, conf.get(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS)).withCSRFProtection(YarnConfiguration.TIMELINE_CSRF_PREFIX).withXFSProtection(YarnConfiguration.TIMELINE_XFS_PREFIX).at(bindAddress).build(ahsWebApp);
        HttpServer2 httpServer = webApp.httpServer();
        String[] names = conf.getTrimmedStrings(YarnConfiguration.TIMELINE_SERVICE_UI_NAMES);
        WebAppContext webAppContext = httpServer.getWebAppContext();
        for (String name : names) {
            String webPath = conf.get(YarnConfiguration.TIMELINE_SERVICE_UI_WEB_PATH_PREFIX + name);
            String onDiskPath = conf.get(YarnConfiguration.TIMELINE_SERVICE_UI_ON_DISK_PATH_PREFIX + name);
            WebAppContext uiWebAppContext = new WebAppContext();
            uiWebAppContext.setContextPath(webPath);
            if (onDiskPath.endsWith(".war")) {
                uiWebAppContext.setWar(onDiskPath);
            } else {
                uiWebAppContext.setResourceBase(onDiskPath);
            }
            final String[] ALL_URLS = { "/*" };
            FilterHolder[] filterHolders = webAppContext.getServletHandler().getFilters();
            for (FilterHolder filterHolder : filterHolders) {
                if (!"guice".equals(filterHolder.getName())) {
                    HttpServer2.defineFilter(uiWebAppContext, filterHolder.getName(), filterHolder.getClassName(), filterHolder.getInitParameters(), ALL_URLS);
                }
            }
            LOG.info("Hosting " + name + " from " + onDiskPath + " at " + webPath);
            httpServer.addHandlerAtFront(uiWebAppContext);
        }
        httpServer.start();
        conf.updateConnectAddr(YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, YarnConfiguration.DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS, this.getListenerAddress());
        LOG.info("Instantiating AHSWebApp at " + getPort());
    } catch (Exception e) {
        String msg = "AHSWebApp failed to start.";
        LOG.error(msg, e);
        throw new YarnRuntimeException(msg, e);
    }
}
Also used : HttpCrossOriginFilterInitializer(org.apache.hadoop.security.HttpCrossOriginFilterInitializer) FilterHolder(org.eclipse.jetty.servlet.FilterHolder) YarnConfiguration(org.apache.hadoop.yarn.conf.YarnConfiguration) Configuration(org.apache.hadoop.conf.Configuration) ArrayList(java.util.ArrayList) TimelineAuthenticationFilterInitializer(org.apache.hadoop.yarn.server.timeline.security.TimelineAuthenticationFilterInitializer) AuthenticationFilterInitializer(org.apache.hadoop.security.AuthenticationFilterInitializer) IOException(java.io.IOException) YarnRuntimeException(org.apache.hadoop.yarn.exceptions.YarnRuntimeException) YarnRuntimeException(org.apache.hadoop.yarn.exceptions.YarnRuntimeException) WebAppContext(org.eclipse.jetty.webapp.WebAppContext) CrossOriginFilterInitializer(org.apache.hadoop.yarn.server.timeline.webapp.CrossOriginFilterInitializer) HttpCrossOriginFilterInitializer(org.apache.hadoop.security.HttpCrossOriginFilterInitializer) AHSWebApp(org.apache.hadoop.yarn.server.applicationhistoryservice.webapp.AHSWebApp) TimelineAuthenticationFilterInitializer(org.apache.hadoop.yarn.server.timeline.security.TimelineAuthenticationFilterInitializer) HttpServer2(org.apache.hadoop.http.HttpServer2)

Aggregations

IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Configuration (org.apache.hadoop.conf.Configuration)1 HttpServer2 (org.apache.hadoop.http.HttpServer2)1 AuthenticationFilterInitializer (org.apache.hadoop.security.AuthenticationFilterInitializer)1 HttpCrossOriginFilterInitializer (org.apache.hadoop.security.HttpCrossOriginFilterInitializer)1 YarnConfiguration (org.apache.hadoop.yarn.conf.YarnConfiguration)1 YarnRuntimeException (org.apache.hadoop.yarn.exceptions.YarnRuntimeException)1 AHSWebApp (org.apache.hadoop.yarn.server.applicationhistoryservice.webapp.AHSWebApp)1 TimelineAuthenticationFilterInitializer (org.apache.hadoop.yarn.server.timeline.security.TimelineAuthenticationFilterInitializer)1 CrossOriginFilterInitializer (org.apache.hadoop.yarn.server.timeline.webapp.CrossOriginFilterInitializer)1 FilterHolder (org.eclipse.jetty.servlet.FilterHolder)1 WebAppContext (org.eclipse.jetty.webapp.WebAppContext)1