讀流程:
1、客戶端通過rpc訪問namenode。(呼叫filesystem的open方法,獲取distributedfilesystem例項)
2、namenode查詢元資料,獲取元資料路徑,將檔案的全部或部分檔案塊的儲存路徑,放入佇列,傳送給客戶端。
3、客戶端收到佇列(fsdatainputstream物件,封裝為dfsinputstream,方便管理datanode與namenode資料流)後,依次遍歷佇列按hadoop的拓撲結構排序,讀取檔案塊資訊。
4、客戶端通過佇列(呼叫read方法)獲取第乙個檔案塊的儲存位置,(dfsinputstream)尋找最近的datanode讀取
5、讀取完成後校驗檔案塊的大小是否符合,如果符合,繼續讀取第二塊檔案塊,不符合,通知namenode當前檔案塊已損壞,從其他節點的獲取當前檔案塊
6、客戶端將這一批檔案塊讀取完後,再次請求namenode獲取下一批檔案塊的位址。
7、客戶端讀取鎖有檔案塊後,通知namenode關閉檔案。
寫流程
1、client發起rpc訪問namenode。
2、namenode收到請求後進行校驗:是否存在校驗,路徑校驗,許可權校驗。
3、所有校驗通過,計算檔案大小,,計算分塊數,分配對應的datanode,記錄元資料,將檔案塊的元資料新增到佇列,返回給客戶端。
4、客戶端收到佇列,將檔案以128m切塊,每塊封裝成packets物件,準備傳送。
5、客戶端取出第一塊位址,從位址中選出乙個距離較近的節點,將packets寫到對應的datanode上。
6、這個datanode通過pipeline(管道)將資料傳到其他datanode上 ,保證了hdfs副本數量
7、客戶端所有packets寫完之後,會給namenode傳送結束訊號。
8、namenode收到結束訊號後,將檔案關閉,同時將檔案設為不可寫入。
刪除流程
1、client傳送rpc請求到namenode。
2、namenode收到請求後將操作更新到edits檔案及記憶體中。
3、namenode更新完元資料後,給客戶端返回乙個ack訊號表示刪除成功,此時檔案並沒從datanode中刪除。
4、等datanode傳送心跳資訊時,namenode收到心跳資訊,檢驗是否與元資料一致
5、不一致,說明datanode刪除,namenode返回一條指令,讓對應的datanode刪除。
HDFS讀取和寫入流程
1 讀檔案的過程 首先 client 通過 file system 的 open 函式開啟檔案,distributed file system 用 rpc呼叫 namenode 節點,得到檔案的資料塊資訊。對於每乙個資料塊,namenode 節點返回儲存資料塊的資料節點的位址。distributed...
HDFS資料寫入流程
1 client 發起檔案寫入請求,通過 rpc 與 namenode 建立通訊,namenode檢查目標檔案,返回是否可以上傳 2 client 請求第乙個 block 該傳輸到哪些 datanode 伺服器上 3 namenode 根據副本數量和副本放置策略進行節點分配,返回datanode節點...
HDFS寫入與讀取流程
那麼問題來了,如果他們之間的乙個datanode突然壞掉了怎麼辦。1 如果傳輸過程中,有某個datanode出現了故障,那麼當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩餘的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時...