??最近有一個優(yōu)化HDFS讀取訪問的需求,需要根據(jù)訪問者的位置計算得到最佳的datanode返回給client,工作中,搜索了各種文章和材料,但是幾乎沒有太深入的,對我這個初學(xué)者來說,信息量不大夠,所以就自己動手深入的看了一下源碼,對相關(guān)的機制進(jìn)行了一定的探索。根據(jù)自己的體會寫一點心得,文中部分術(shù)語不夠準(zhǔn)確的希望能夠留言予以指正。
-
HDFS文件訪問的機制
無論那種情形(CLI、Java、REST...),HDFS文件系統(tǒng)最終都是通過在節(jié)點上的HDFS Client來實現(xiàn)對文件的訪問,在邏輯上來講,是這樣的:

client
在實際的物理拓?fù)渲?,是這樣的:
-
JAVA API client
javaclient -
REST API client
REST
擔(dān)負(fù)著Client角色的是org.apache.hadoop.hdfs.DFSClient這個類,它提供了一系列訪問HDFS的接口和工具。
第一幅圖是我手動畫的,為了熟悉ubuntu下的dia繪圖工具,加上刪選和操作關(guān)聯(lián)比較緊密的類,前后花了將近4個小時。。。第二幅圖是用eclipse的插件Objectaid輔助生成的,手動調(diào)整了個別的函數(shù)調(diào)用,雖然這廝功能強大,但是也有不夠完善的地方,不過瑕不掩瑜,畢竟比dia方便很多。 -
Java API 方式文件讀取時序圖一(Using dia):

Hadoop HDFS open文件操作時序圖
-
Java API 方式文件讀取時序圖二(Using Objecaid for eclipse):

Java API sequence
-
webHDFS Client get操作時序圖(Using Objecaid for eclipse):

REST sequence
??待續(xù)

