HDFS文件讀寫過程


 

存儲流程

a)         Clinet首先將要存儲的數據切分成若干塊,然后向NameNode發送存儲請求,

b)         NameNode檢查權限、存儲文件是否已存在等信息,確認無誤后返回允許存儲的響應,這個響應還包括第一個Block要放在哪個DataNode哪個的地址的信息。

c)         Clinet得到NameNode的響應,打開文件輸出流,向第一個DataNode請求打開管道,DN1接受的信息后繼續通知DN2DN2接受到DN1的信息后通知DN3,DN3接受到信息后確認沒有更多副本了,向DN2返回響應信息,DN2獲取到DN3的響應后向DN1返回響應,DN1得到響應后向Clinet返回響應

d)   Clinet獲得響應后,確認pipeline(管線,管線上每個節點都能收到相同的數據流)已開通,開始寫入數據。

首先向向緩沖區chunkbuff中寫入,當達到一個chunk大小時(512byte),將chunk寫出到packetbuff,每個chunk有一個MD5碼(4byte),這個碼是由整個chunk的字節算出,因此一個chunk516byte,當packetbuff達到一個packet大小時(64KB),將packet寫出到DataQueueDN1 DataQueue上獲取一個packetpacket會在pipeline里傳入到DN2DN3DN會檢驗packet中的各個chunkMD5是否匹配,然后返回響應ack packet放到ack Queue中返回給clinet,如此保證數據的完整正確傳輸。

e)         clinet確認block1完成傳輸后,向NameNode發送請求,確認block1已存入,NN更新自己的Fsimage,並返回block2的存儲地址

 

f)          重復,直到所有block都存入。

 

 

讀取流程

1)客戶端通過Distributed FileSystem向NameNode請求下載文件,NameNode通過查詢元數據,找到文件塊所在的DataNode地址。

2)挑選一台DataNode(就近原則,然后隨機)服務器,請求讀取數據。

3)DataNode開始傳輸數據給客戶端(從磁盤里面讀取數據輸入流,以packet為單位來做校驗)。

4)客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。


免責聲明!

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



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