HDFS NameNode 启动流程中启动 Namenode上的 http 服务~~~

启动 NameNode上的 Http服务

一、概述

startHttpServer() 主要作用启动 NameNode上的 Http服务,其时序图如图所示:

二、核心源码

通过代码定位和时序图得知 Namenode 上的 Http服务启动的核心代码为:

2.1. 获取文本传输协议

1
HttpConfig.Policy policy = DFSUtil.getHttpPolicy(conf);

hdfs-default.xml 得到文本传输协议:HTTP_ONLY

截屏2022-03-13 下午4.35.03

hdfs-default.xml 得到文本传输协议:HTTP_ONLY

1
HttpConfig.Policy policy = DFSUtil.getHttpPolicy(conf);
截屏2022-03-11 下午11.04.55

2.2. 页面访问 IP 地址

1
final String infoHost = bindAddress.getHostName();

得到 NameNode 的页面访问IP地址,默认是:0.0.0.0

2.3. initWebHdfs(conf);

  1. final InetSocketAddress httpAddr = bindAddress;

  2. HttpServer2

    Hadoop 喜欢封装自己的东西,比如本来是有 RPC 的,但是 Hadoop 会封装 HadoopRPC 这里面也一样,Hadoop 封装自己的 HttpServer2

2.4. 绑定功能属性

1
setupServlets(httpServer, conf);

HttpServer2 绑定了一堆 Servlet,定义好了接收哪些 Http 请求,接收到了请求由谁来处,httpServer.addInternalServlet 就是绑定功能,里面有很多我们就经常常见的一些功能啊

  • 检查文件系统的健康状况

    1
    httpServer.addInternalServlet("fsck", "/fsck", FsckServlet.class, true);
  • 浏览目录信息

    在50071页面,就是通过这个 http://xx.xx.xx.xx:50070/listPath?path=/user/warehouse

    1
    httpServer.addInternalServlet("listPaths", "/listPaths/*", ListPathsServlet.class, false);

注: 如果有一天想在当前的原生 Hdfs Web 页面添加功能。比如说添加一个修改 按钮,则在这儿再绑定一个功能,绑定完这个功能之后前端找到添加这样一个功能点就行了。然后它调用当前这个ApiServer 地址就可以执行。

2.5. httpServer.start();

启动 HttpServer服务,对外开放 50071 端口

截屏2022-08-18 20.11.17