1、客戶端通過呼叫filesystem物件的open()來讀取希望開啟的檔案。
2、 client向namenode發起rpc請求,來確定請求檔案block所在的位置;
3、 namenode會視情況返回檔案的部分或者全部block列表,對於每個block,namenode 都會返回含有該 block 副本的 datanode 位址; 這些返回的 dn 位址,會按照集群拓撲結構得出 datanode 與客戶端的距離,然後進行排序,排序兩個規則:網路拓撲結構中距離 client 近的排靠前;心跳機制中超時匯報的 dn 狀態為 stale,這樣的排靠後;
4、 client 選取排序靠前的 datanode 來讀取 block,如果客戶端本身就是datanode,那麼將從本地直接獲取資料(短路讀取特性);
5、 底層上本質是建立 socket stream(fsdatainputstream),重複的呼叫父類 datainputstream 的 read 方法,直到這個塊上的資料讀取完畢;
6、並行讀取,若失敗重新讀取
7、 當讀完列表的 block 後,若檔案讀取還沒有結束,客戶端會繼續向namenode 獲取下一批的 block 列表;
8、返回後續block列表
9、 最終關閉讀流,並將讀取來所有的 block 會合併成乙個完整的最終檔案。
tim帶你學 Fsimage,Edits詳解
目標 掌握fsimage和edits的作用。1 第一次啟動namenode格式化後,建立fsimage和edits檔案。如果不是第一次啟動,直接載入edits和fsimage檔案到記憶體。2 客戶端對元資料進行增刪改的請求。3 namenode記錄操作日誌,更新滾動日誌。4 namenode在記憶體...
地表最強系列之 帶你學HDFS
認識hdfs hdfs是hadoop專案的核心子專案,用於大資料領域的資料儲存 hdfs是被設計成適合執行在通用硬體上的分布式系統它和現有的分布式檔案系統有很多共同點。但同時,它和其他的分布式檔案系統的區別也是很明顯的。hdfs是乙個高度容錯性的系統,適合部署在廉價的機器上。hdfs能提供高吞吐量的...
HDFS讀取資料的流程
1 客戶端通過呼叫filesystem物件的open 來讀取希望開啟的檔案。2 client向namenode發起rpc請求,來確定請求檔案block所在的位置 3 namenode會視情況返回檔案的部分或者全部block列表,對於每個block,namenode 都會返回含有該 block 副本的...