hadoop三個核心內容是HDFS、mapreduce以及HBase。此文簡單描述HDFS的讀寫原理
讀原理
HDFS客戶端調用Distributed FileSystem中的open()
通過RPC協議調用NameNode來確定請求文件塊所在的位置
Distributed FileSystem(以下簡稱DFS)向客戶端返回一個支持文件定位的輸入流對象FSDataInputStream(以下簡稱FSDIS)用於給客戶端讀取數據的。FSDIS包含一個DFSInputStream對象,是用於管理NN和DN之間的I/O
客戶端在FSDIS上調用read()函數
以近到遠讀取DataNode上的數據,這期間會一直不斷的調用read(),直到讀取數據結束
在FSDIS中調用close()關閉
寫原理
HDFS客戶端在DFS中調用了create()函數創建了一個文件
NN對請求進行驗證(驗證內容爲兩部分:一是文件是否存在。二是請求客戶端是否有寫權限)。NN創建文件成功時,DFS會返回FSDataOutputStream(以下簡稱FSDOS)給客戶端,讓客戶端用來寫入數據。FSDOS中也包含了一個DFSOS
客戶端寫入數據時,DFSOS會將文件分割成包。然後放入一個內部隊列,稱其爲數據隊列。DN會形成一“管道”,DataStream會將這些小的文件包放入數據流中,DataStream的作用是請求NN爲數據文件包分配合適的DN存放副本
DataStream會逐一傳送給DN,讓DN存儲
DFSOS同時也會保存數據到一個內部隊列,用來等待DN返回確認信息,這個隊列被稱爲確認隊列
最後在FSDOS中調用close()