稍微研究了一下HdfsProxy,希望可以了解其机制,简单的实现一个server端
首先看一下其开始的流程图:
在main函数中首先调用了HdfsProxy的createHdfsProxy,在这个函数中new了一个Configuration,然后加载了hdfsproxy-default.xml文件,该文件中有一些基本的配置,需要用户添加,具体用到了什么后边可以看到。
StringUtils.startupShutdownMessage函数主要是用来打开关闭一个LOG的,这里可以不用过多的在意,主要是一个追踪过程
然后new了一个HdfsProxy对象,在构造函数中完成了初始化操作,在这个函数中第一句话就是:
sslAddr = getSslAddr(conf);
从conf中获得sslAddr
然后是:
String nn = conf.get("hdfsproxy.dfs.namenode.address");
说明在上述提到的xml文件中需要配置namenode的地址
之后根据这个字符串创建了InetSocketAddress,并且new了一个新的configuration,该configuration主要是加载ssl相关的一些配置
然后new了一个ProxyHttpServer对象,传递的参数就是刚创建的sslConf以及从conf中得到的sslAddr
之后就是给这个proxyServer设置一些属性,包括proxy的端口,连接的namenode的地址,当前的conf
然后调用了proxy的addGlobalFilter函数,这个过程主要涉及到Hadoop的一些身份认证的过程,暂时不去了解分析,就先放下了
接下来的三句话很关键,在这个proxy中添加注册了不同的servlet,指明了不同的https url的前缀处理的函数不同。
之后就是调用了start函数,开启了server
接下来看一下类图,了解各类之间的关系
HdfsProxy本身并没有做什么事情,它还是使用Hadoop本身的HttpServer,就是增加了一层封装,并且只实现了doGet方法,属于非常简单的server
现在23.1版本的代码不再是使用HdfsProxy,而是一个新的包httpfs,关于这个初步猜测可能是hoop的contribute。
相关阅读:
Hadoop HDFS源码学习笔记(一)
Hadoop HDFS源码学习笔记(七)--DFSInputStream -- openInfo
Hadoop HDFS源码学习笔记(八)---HdfsProxy
更多Hadoop相关信息见Hadoop 专题页面 ?tid=13