HDFS讀寫原理

2022-08-16 03:33:16 字數 1832 閱讀 8040

1.hdfs讀取檔案

(1)首先呼叫filesystem物件的open方法,其實獲取的是乙個distributedfilesystem的例項。

(2)distributedfilesystem通過rpc(遠端過程呼叫)獲得檔案的第一批block的locations,同一block按照重複數會返回多個location,這些location按照hadoop拓撲結構排序,距離客戶端近的排在前面。

(3)前兩步會返回乙個fsdatainputstream物件,該物件會被封裝成dfsinputstream物件,dfsinputstream可以方便管理datanode和namenode資料流。客戶端呼叫read方法,dfsinputstream就會找到離客戶端最近的datanode並連線datanode。

(4)資料從datanode源源不斷的流向客戶端。

(5)如果第乙個block塊的資料讀完了,就會關閉指向第乙個block的datanode連線,接下來讀取下乙個block塊。這些操作對客戶端來說是透明的,從客戶端的角度來看只是讀乙個持續不斷的流。

(6)如果第一批block都讀完了,dfsinputstream就會去namenode拿下一批blocks的location,然後繼續讀,如果所有的block塊都讀完,這時會關閉所有的流。

2.hdfs寫檔案

(1)客戶端通過呼叫distributedfilesystem的create方法,建立乙個新檔案。

(2)distributedfilesystem通過rpc(遠端過程呼叫)呼叫namenode,去建立乙個沒有blocks關聯的新檔案。建立前,namenode會作各種校驗,比如檔案是否存在,客戶端有無許可權去建立等。如果校驗通過,namenode就會記錄下新檔案,否則就會丟擲io異常。

(3)前兩步結束後返回fsdataoutputstream物件,和讀檔案的時候相似,fsdataoutputstream被封裝成dfsoutputstream,dfsoutputstream可以協調namenode和datanode。客戶端開始寫資料到dfsoutputstream,dfsoutputstream會把資料切成乙個個小packet,然後排成佇列data queue。

(4)datasteamer會去處理接收data queue,它先詢問namenode這個新的block最適合儲存在哪幾個datanode裡,比如重複數是3,那麼就找到3個最合適的datanode,把他們排成乙個pipeline。datastreamer把packet按佇列輸出到管道的第乙個datanode中,第乙個datanode又把packet輸出到第二個datanode中,以此類推。

(5)dfsoutputstream還有乙個佇列叫做ack queue,也就是packet組成的,等待datanode的收到響應,當pipeline中的所有datanode都表示已經收到的時候,這時候ack queue才會把對應的packet包移除。

(6)客戶端完成寫資料後,呼叫close方法關閉寫入流。

(7)datastreamer把剩餘的包都刷到pipeline裡,然後等待ack訊息,收到最後乙個ack後,通知datanode把檔案標識為已完成。

(原文

hadoop原理記錄 HDFS讀寫資料

2.返回目標檔案的元資料 挑選一台datanode 就近原則,然後隨機 伺服器,請求讀取資料。3.客戶端請求讀資料block1 datanode開始傳輸資料給客戶端 從磁碟裡面讀取資料輸入流,以packet為單位來做校驗 4.傳輸資料 客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。...

hdfs讀寫流程 HDFS 讀寫流程(詳解)

hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...