HDFS 讀寫數據流程

目錄

一、HDFS 寫數據流程

二、網絡拓撲-節點距離計算

三、機架感知

四、HDFS 讀數據流程


一、HDFS 寫數據流程


HDFS 文件寫入流程圖如下:三個模塊(客戶端、NameNode、DataNode)

【1】校驗:客戶端通過 DistributedFileSystem 模塊向 NameNode 請求上傳文件,NameNode 會檢查目標文件是否已經存在,父目錄是否存在。
【2】響應:NameNode 返回是否可以上傳的信號。
【3】請求 NameNode:客戶端對上傳的數據根據塊進行切片,並請求第一塊 Block 上傳到哪幾個 DataNode 服務器上。
【4】響應 DataNode節點信息:NameNode 根據副本數等信息返回可上傳的DataNode節點,例如這裏的 dn1,dn2,dn3。
【5】建立通道:客戶端通過 FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,然後dn2調用dn3,將這個通信管道建立完成。
【6】DataNode 響應 Client:dn1、dn2、dn3逐級應答客戶端。
【7】上傳數據到DataNode:客戶端開始往 dn1上傳第一個Block(先從磁盤讀取數據放到一個本地內存緩存),以 Packet爲單位,dn1收到一個 Packet就會傳給 dn2,dn2傳給 dn3;
dn1每傳一個 packet會放入一個應答隊列等待應答
【8】通知 NameNode上傳完成:當一個 Block傳輸完成之後,客戶端再次請求 NameNode上傳第二個 Block的服務器。
【9】關閉輸入輸出流

二、網絡拓撲-節點距離計算


在 HDFS寫數據的過程中,NameNode會選擇距離最近的 DataNode接收數據。那麼這個最近距離怎麼計算呢?
節點距離:兩個節點到達最近的共同祖先的距離總和。

例如,假設有數據中心d1 機架r1 中的節點 n1。該節點可以表示爲/d1/r1/n1。利用這種標記,這裏給出四種距離描述,如上圖所示:大家算一算每兩個節點之間的距離:每一個線表示1,例如 11 到 4距離爲3。so easy

三、機架感知


【官方說明】:【鏈接

對於常見情況,當複製因子爲3時,HDFS的放置策略是將一個副本放在本地機架中的一個節點上,另一個放在本地機架中的另一個節點上,最後一個放在不同機架中的另一個節點上。

【1】第一個副本在 Client所處的節點上。如果客戶端在集羣外,隨機選一個。
【2】第二個副本和第一個副本位於相同機架,隨機節點。
【3】第三個副本位於不同機架,隨機節點。

四、HDFS 讀數據流程


HDFS的讀數據流程,如下圖所示:

【1】客戶端通過 Distributed FileSystem向 NameNode請求下載文件,NameNode通過查詢元數據,找到文件塊所在的DataNode地址進行返回。
【2】挑選一臺 DataNode(就近原則,然後隨機)服務器,請求讀取數據。當第一次讀取完成之後,才進行第二次塊的讀取。
【3】DataNode開始傳輸數據給客戶端(從磁盤裏面讀取數據輸入流,以 Packet爲單位來做校驗)。
【4】客戶端以 Packet爲單位接收,先在本地緩存,然後寫入目標文件。


  ----關注公衆號,獲取更多內容----

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