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类
网友评论