本文包含的主要内容如下:
① WebHDFS的原理
② ExternalCall以及WebHdfs请求如何与RPC共用CallQueue
③ ExternalCall的执行与响应过程(sendResponse)
④ WebHdfs和HttpFS的简单区别
⑤ 个人的一些关于webhdfs的总结
一、WebHDFS的原理
1.前置知识:HttpServer2
HDFS自己对Jetty服务器进行了一个封装,这个类就是HttpServer2.
HttpServer2类里面有下面几个跟Web相关的重要的字段:
protected final Server webServer;
private final HandlerCollection handlers;
private final List<ServerConnector> listeners = Lists.newArrayList();
protected final WebAppContext webAppContext;
其中:
Server是org.eclipse.jetty.server.Server
类型。
HandlerCollection是org.eclipse.jetty.server.handler.HandlerCollection
类型。
ServerConnector是org.eclipse.jetty.server.ServerConnector
类型。
WebAppContext是org.eclipse.jetty.webapp.WebAppContext
类型。
可以看出都是Jetty的相关类,跟Web服务相关。
HDFS中HttpServer2的start方法里面会进行Jetty Web服务器的初始化以及启动操作。
2.initWebHdfs
namenode在启动时会调用startHttpServer()方法。
startHttpServer方法中会去创建NameNodeHttpServer对象并执行其start方法。在start方法里又会去进行各种配置、对象的初始化操作,调用initWebHdfs方法,执行HttpServer2#start方法。最终会去启动Jetty Web Server的start方法,启动服务端。
网友评论