文件寫入HDFS的流程

假設HDFS客戶端爲node11,用戶A想要將文件apache.log寫到HDFS上,該文件大小爲100MB,假設用戶配置的文件block大小爲64MB,請結合你的理解,描述該文件寫入HDFS的整個流程(請用步驟1,步驟2,……,描述)

  1. 使用HDFS提供的客戶端(client),向遠程的namenode發起RPC請求;

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

  3. 默認block大小爲64MB,因此100MB被切分爲兩個block,客戶端會依次寫入每個block,client不會把整個block直接寫入,而是會將文件切分成多個packets,並在內部以隊列的形式管理這些packets,並向namenode申請新的blocks,獲取用來存儲replicas的合適的datanodes列表,列表的大小根據在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設定的數量。

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