那麼問題來了,如果他們之間的乙個datanode突然壞掉了怎麼辦。
1、如果傳輸過程中,有某個datanode出現了故障,那麼當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩餘的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時namenode會分配乙個新的datanode,保持replicas設定的數量。
2、關閉pipeline,將ack queue中的資料塊放入data queue的開始。
3、當前的資料塊在已經寫入的資料節點中被元資料節點賦予新的標示,則錯誤節點重啟後能夠察覺其資料塊是過時的,會被刪除。
4、失敗的資料節點從pipeline中移除,另外的資料塊則寫入pipeline中的另外兩個資料節點。
5、元資料節點則被通知此資料塊是複製塊數不足,將來會再建立第三份備份。
6、客戶端呼叫create()來建立檔案
7、distributedfilesystem用rpc呼叫元資料節點,在檔案系統的命名空間中建立乙個新的檔案。
8、元資料節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。
9、distributedfilesystem返回dfsoutputstream,客戶端用於寫資料。
10、客戶端開始寫入資料,dfsoutputstream將資料分成塊,寫入data queue。
11、data queue由data streamer讀取,並通知元資料節點分配資料節點,用來儲存資料塊(每塊預設複製3塊)。分配的資料節點放在乙個pipeline裡。
12、data streamer將資料塊寫入pipeline中的第乙個資料節點。第乙個資料節點將資料塊傳送給第二個資料節點。第二個資料節點將資料傳送給第三個資料節點。
13、dfsoutputstream為發出去的資料塊儲存了ack queue,等待pipeline中的資料節點告知資料已經寫入成功。
HDFS讀取和寫入流程
1 讀檔案的過程 首先 client 通過 file system 的 open 函式開啟檔案,distributed file system 用 rpc呼叫 namenode 節點,得到檔案的資料塊資訊。對於每乙個資料塊,namenode 節點返回儲存資料塊的資料節點的位址。distributed...
HDFS的讀取流程 寫入流程 刪除流程
讀流程 1 客戶端通過rpc訪問namenode。呼叫filesystem的open方法,獲取distributedfilesystem例項 2 namenode查詢元資料,獲取元資料路徑,將檔案的全部或部分檔案塊的儲存路徑,放入佇列,傳送給客戶端。3 客戶端收到佇列 fsdatainputstre...
hdfs檔案寫入與讀取過程
client向namenode請求上傳a.txt namenode檢測client的上傳許可權 namenode回答client是否可以上傳 client將檔案按照block size大小將檔案分為幾份,並向namenode請求上傳乙個block namenode根據datanode上的block資...