1.當客戶端輸入一條指令:hdfs dfs -put text.txt /text時,這條命令會給到DistributeFileSystem。 2.通過DistributeFileSystem簡稱DFS會創建DFSClient。 3.DFSClient會與hdfs伺服器建立RPC通訊,此時客戶端就可 ...
1.當客戶端輸入一條指令:hdfs dfs -put text.txt /text時,這條命令會給到DistributeFileSystem。
2.通過DistributeFileSystem簡稱DFS會創建DFSClient。
3.DFSClient會與hdfs伺服器建立RPC通訊,此時客戶端就可以訪問NameNode,並向其發送請求,並且NameNode接到請求命令
後會返回一個NameNode代理對象(NameNodeProxies)。
4.客戶端通過代理對象NameNodeProxies請求創建文件元信息。
5.NameNode接受請求後就開始創建文件元信息,這些元信息包括:文件名:text.txt、存儲路徑:/text、文件大小:1KB、冗餘度:3、數據塊:
根據文件大小會切分成多個數據塊,如果文件更大,會緩存文件元信息(緩存大小預設為1000M,可更改),數據塊可以分別存到3個副本中:
DataNode1、DataNode2、DataNode3。
6.NameNode向客戶端返回可以存數據的DataNode,這裡遵循機架感應原則。
7.客戶端根據返回的信息先將文件分塊(Hadoop2.x版本每一個block為128M,而之前的版本為64M)。
8.客戶端根據NameNode返回的DataNoded的地址信息直接發送給DataNode,並通過創建輸出流OutputStream寫入到hdfs中,同時DataNode
會複製到其他兩台機器,完成迴圈上傳。
9.上傳完成後,DataNode向客戶端通信表示已經傳完數據塊,同時向NameNode報告,數據上傳完成。
以上是我通過學習,自己總結的hdfs的上傳流程,歡迎大家指正,我會根據大家的反饋認真改進完善!