ResourceManager web页面

2019-01-07  本文已影响10人  JX907

Yarn的监控页面在ResourceManager中。

jetty服务启动过程:

org.apache.hadoop.yarn.server.resourcemanager.ResourceManager#serviceStart
org.apache.hadoop.yarn.server.resourcemanager.ResourceManager#startWepApp
org.apache.hadoop.yarn.webapp.WebApps.Builder#start
org.apache.hadoop.yarn.webapp.WebApp#setHttpServer
org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebServices(页面访问的相应处理类)

servlet及过滤定义:

在WebApps#start方法中实例化HttpServer2,并定义Servlet和filter

        HttpServer2 server = builder.build();

        for(ServletStruct struct: servlets) {
          server.addServlet(struct.name, struct.spec, struct.clazz);
        }
        for(Map.Entry<String, Object> entry : attributes.entrySet()) {
          server.setAttribute(entry.getKey(), entry.getValue());
        }
        HttpServer2.defineFilter(server.getWebAppContext(), "guice",
          GuiceFilter.class.getName(), null, new String[] { "/*" });

第一个for中成员变量servlets定义:

private final HashSet<ServletStruct> servlets = new HashSet<ServletStruct>();

ServletStruct类包括servlet的实现类、名称、路径,类定义如下:

static class ServletStruct {
      public Class<? extends HttpServlet> clazz;
      public String name;
      public String spec;
    }

变量servlets中的内容赋值过程:
org.apache.hadoop.yarn.server.resourcemanager.ResourceManager#startWepApp
org.apache.hadoop.yarn.webapp.WebApps.Builder#withServlet

Resoucemanager#startWepApp中:

 builder.withServlet(ProxyUriUtils.PROXY_SERVLET_NAME,
          ProxyUriUtils.PROXY_PATH_SPEC, WebAppProxyServlet.class);

其中
ProxyUriUtils.PROXY_SERVLET_NAME="proxy"
ProxyUriUtils.PROXY_PATH_SPEC="/proxy/*"
WebAppProxyServlet是Sevlet实现类。

从上面代码可以看出拦截器的实现类为GuiceFilter,拦截路径为/*,此处并不像NameNode进程中的拦截器定义可以从配置文件中配置实现类。

其他拦截器定义位置:
org.apache.hadoop.yarn.webapp.WebApp类实现com.google.inject.AbstractModule,在configure()方法中
设置拦截器,该拦截器的实现类为RMWebAppFilter

RMWebApp继承WebApp,其setup方法中bind上面提到的RMWebServices类

上一篇 下一篇

猜你喜欢

热点阅读