HDFS讀寫流程


1、HDFS寫流程

    客戶端要向HDFS寫數據,首先要跟namenode通信以確認可以寫文件並獲得接收文件block的datanode,然后,客戶端按順序將文件逐個block傳遞給相應datanode,並由接收到block的datanode負責向其他datanode復制block的副本

1)跟NN通信請求上傳文件,NN檢查目標文件是否存在,父目錄是否存在

2)NN返回是否可以上傳

3)client會先對文件進行切分,比如一個block塊128M,文件300M就會被切分成3個塊,兩個128M,一個44M。請求第一個block該傳輸到哪些DN服務器上。

4)NN返回DN的服務器。

5)client請求一個台DN上傳數據(RPC調用,建立pipeline),第一個DN收到請求會繼續調用第二個DN,然后第二個調用第三個DN,將整個pipeline建立完成,逐級返回客戶端。

6)client開始傳輸block(先從磁盤讀取數據存儲到一個本地內存緩存),以packet為單位(一個packet為64kb),寫入數據的時候datanode會進行數據校驗,並不是通過packet為單位校驗,而是以chunk為單位校驗(512byte),第一個DN收到第一個packet就會傳給第二台,第二台傳給第三台;第一台每傳一個packet就會放入一個應答隊列等待應答。

7)當一個block傳輸完成時,client再次請求NN上傳第二個block的服務器。

 

1、HDFS讀流程

客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據返回的信息找到相應datanode逐個獲取文件的block並在客戶端本地進行數據追加合並從而獲得整個文件

1)跟NN通信查詢元數據(block所在的DN的節點),找到文件塊所在的DN的服務器。

2)挑選一台DN(就近原則,然后隨機)服務器,請求建立socket流。

3)DN開始發送數據(從磁盤里讀取數據放入流,一packet為單位做校驗)

4)客戶端以packet為單位接收,現在本地緩存,然后寫入目標文件中,后面的block塊就相當於append到前面的block塊,最后合成最終需要的文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM