HDFS讀寫流程,HDFS文件是怎樣上傳及下載的呢

一.HDFS讀流程(文件下載)


HDFS讀寫流程,HDFS文件是怎樣上傳及下載的呢

為了降低整體的帶寬消耗和讀取延時,HDFS會盡量讓讀取程序讀取離它最近的副本。

如果在讀取程序的同一個機架上有一個副本,那麼就讀取該副本。

如果一個HDFS集群跨越多個數據中心,那麼客戶端也將首先讀取本地數據中心的副本。

語義:下載一個文件

客戶端(Client)通過Distributed FileSystem向NameNode請求下載文件,namenode通過查詢元數據,找到文件塊所在的datanode地址。

NameNode會按距離策略排序返回存放相關塊的DataNode地址,Client挑選一臺datanode(就近原則,然後隨機)服務器,請求讀取數據。

datanode開始傳輸數據給客戶端(從磁盤裡面讀取數據輸入流,以packet為單位來做校驗)。

客戶端以packet為單位接收,先在本地緩存,然後寫入目標文件。

語義:下載一個文件其實是獲取文件的所有的block元數據,那麼子集獲取某些block應該成立

HDFS支持Client給出文件的offset自定義連接哪些block的DataNode,自定義獲取數據。這個是支持計算層的分治,並行計算的核心。

二.HDFS寫流程(文件上傳)


HDFS讀寫流程,HDFS文件是怎樣上傳及下載的呢


Client和NameNode連接創建文件元數據

NameNode判定元數據是否有效

NameNode觸發副本放置策略,返回一個有序的DataNode列表

Client與DataNode建立Pipeline連接

Client將塊切分成packet(64KB),並使用chunk(512B)+chunksum(4B)填充

Client將packet放入發送隊列dataqueue中,並向第一個DataNode發送

第一個DataNode收到packet後本地保存併發送給第二個DataNode

第二個DataNode收到packet後本地保存併發送給第三個DataNode

這一個過程中,上游節點同時發送下一個packet

生活中類似於工廠的流水線,結論:流式其實也是變種的並行計算

HDFS使用這種傳輸方式,副本數對於Client是透明的

當block傳輸完成,DataNode們各自向NameNode彙報,同時Client繼續傳輸下一個block

所以,Client的傳輸和block的彙報也是並行的

HDFS讀寫流程,HDFS文件是怎樣上傳及下載的呢


分享到:


相關文章: