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