1. 程式人生 > >hdfs中namenode及DataNode,源資料資訊,讀寫檔案的流程等

hdfs中namenode及DataNode,源資料資訊,讀寫檔案的流程等

  • 客戶端呼叫create()來建立檔案
  • DistributedFileSystem用RPC呼叫元資料節點,在檔案系統的名稱空間中建立一個新的檔案。
  • 元資料節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。
  • DistributedFileSystem返回DFSOutputStream,客戶端用於寫資料。
  • 客戶端開始寫入資料,DFSOutputStream將資料分成塊,寫入data queue。
  • Data queue由Data Streamer讀取,並通知元資料節點分配資料節點,用來儲存資料塊(每塊預設複製3塊)。分配的資料節點放在一個pipeline裡。
  • Data Streamer將資料塊寫入pipeline中的第一個資料節點。第一個資料節點將資料塊傳送給第二個資料節點。第二個資料節點將資料傳送給第三個資料節點。
  • DFSOutputStream為發出去的資料塊儲存了ack queue,等待pipeline中的資料節點告知資料已經寫入成功。
  • 如果資料節點在寫入的過程中失敗:
    • 關閉pipeline,將ack queue中的資料塊放入data queue的開始。
    • 當前的資料塊在已經寫入的資料節點中被元資料節點賦予新的標示,則錯誤節點重啟後能夠察覺其資料塊是過時的,會被刪除。
    • 失敗的資料節點從pipeline中移除,另外的資料塊則寫入pipeline中的另外兩個資料節點。
    • 元資料節點則被通知此資料塊是複製塊數不足,將來會再建立第三份備份。
  • 當客戶端結束寫入資料,則呼叫stream的close函式。此操作將所有的資料塊寫入pipeline中的資料節點,並等待ack queue返回成功。最後通知元資料節點寫入完畢。