1) 讀檔案的過程:
首先 client 通過 file system 的 open 函式開啟檔案,distributed file system 用 rpc呼叫 namenode 節點,得到檔案的資料塊資訊。對於每乙個資料塊,namenode 節點返回儲存資料塊的資料節點的位址。distributed file system 返回 fsdatainputstream 給客戶端,用來讀取資料。客戶端呼叫 stream 的 read()函式開始讀取資料。dfsinputstream連線儲存此檔案第乙個資料塊的最近的資料節點。datanode 從資料節點讀到客戶端(client),當此資料塊讀取完畢時,dfsinputstream 關閉和此資料節點的連線,然後連線此檔案下乙個資料塊的最近的資料節點。當客戶端讀取完畢資料的時候,呼叫fsdatainputstream 的 close 函式。
在讀取資料的過程中,如果客戶端在與資料節點通訊出現錯誤,則嘗試連線包含此資料塊的下乙個資料節點。失敗的資料節點將被記錄,以後不再連線。
2) 寫檔案的過程:
客戶端呼叫 create()來建立檔案,distributed file system 用 rpc 呼叫 namenode節點,在檔案系統的命名空間中建立乙個新的檔案。namenode 節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。distributed file system 返回 dfsoutputstream,客戶端用於寫資料。客戶端開始寫入資料,dfsoutputstream 將資料分成塊,寫入 data queue。data queue 由 data streamer 讀取,並通知 namenode 節點分配資料節點,用來儲存資料塊(每塊預設複製 3塊)。分配的資料節點放在乙個 pipeline 裡。data streamer 將資料塊寫入 pipeline 中的第乙個資料節點。第乙個資料節點將資料塊傳送給第二個資料節點。第二個資料節點將資料傳送給第三個資料節點。dfsoutputstream 為發出去的資料塊儲存了 ack queue,等待 pipeline 中的資料節點告知資料已經寫入成功。
HDFS的讀取流程 寫入流程 刪除流程
讀流程 1 客戶端通過rpc訪問namenode。呼叫filesystem的open方法,獲取distributedfilesystem例項 2 namenode查詢元資料,獲取元資料路徑,將檔案的全部或部分檔案塊的儲存路徑,放入佇列,傳送給客戶端。3 客戶端收到佇列 fsdatainputstre...
HDFS資料寫入流程
1 client 發起檔案寫入請求,通過 rpc 與 namenode 建立通訊,namenode檢查目標檔案,返回是否可以上傳 2 client 請求第乙個 block 該傳輸到哪些 datanode 伺服器上 3 namenode 根據副本數量和副本放置策略進行節點分配,返回datanode節點...
HDFS寫入與讀取流程
那麼問題來了,如果他們之間的乙個datanode突然壞掉了怎麼辦。1 如果傳輸過程中,有某個datanode出現了故障,那麼當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩餘的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時...