您好,登錄后才能下訂單哦!
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的流程圖
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。