淺談HDFS的寫流程

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

二、Namenode會檢查要建立的文件是否已經存在,建立者是否有權限進行操做,成功則會爲文件建立一個記錄,不然會讓客戶端拋出異常;異步

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

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

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

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

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

八、只要寫入了dfs.replication.min的複本數(默認爲1),寫操做就會成功,而且這個塊能夠在集羣中異步複製,直到達到其目標複本數(dfs.replication的默認值爲3),由於namenode已經知道文件由哪些塊組成,因此它在返回成功前只須要等待數據塊進行最小量的複製。ip

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



相關文章
相關標籤/搜索