1. 程式人生 > >淺談HDFS的寫流程

淺談HDFS的寫流程

ont 返回 inxi 淺談 中繼 nod medium 大小 數據塊

1、使用HDFS提供的客戶端Client,向遠程的Namenode發起RPC請求

2、Namenode會檢查要創建的文件是否已經存在,創建者是否有權限進行操作,成功則會為文件創建一個記錄,否則會讓客戶端拋出異常;

3、當客戶端開始寫入文件的時候,客戶端會將文件切分成多個packets,並在內部以數據隊列“data queue(數據隊列)”的形式管理這些packets,並向Namenode申請blocks,獲取用來存儲replicas的合適的datanode列表,列表的大小根據Namenode中replication的設定而定;

4、開始以pipeline(管道)的形式將packet寫入所有的replicas中。開發庫把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之後,再將其傳遞給在此pipeline中的下一個datanode,直到最後一個datanode,這種寫數據的方式呈流水線的形式。

5、最後一個datanode成功存儲之後會返回一個ack packet(確認隊列),在pipeline裏傳遞至客戶端,在客戶端的開發庫內部維護著"ack queue",成功收到datanode返回的ack packet後會從"ack queue"移除相應的packet。

6、如果傳輸過程中,有某個datanode出現了故障,那麽當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩余的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持replicas設定的數量。

7、客戶端完成數據的寫入後,會對數據流調用close()方法,關閉數據流;

8、只要寫入了dfs.replication.min的復本數(默認為1),寫操作就會成功,並且這個塊可以在集群中異步復制,直到達到其目標復本數(dfs.replication的默認值為3),因為namenode已經知道文件由哪些塊組成,所以它在返回成功前只需要等待數據塊進行最小量的復制。

技術分享圖片

客戶端將數據寫入HDFS的流程圖



技術分享圖片


淺談HDFS的寫流程