Hadoop HDFS源碼學習筆記(八)---HdfsProxy

稍微研究了一下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。暫時沒有去分析,以後有機會再說吧 呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章