1. 程式人生 > >HDFS讀寫檔案

HDFS讀寫檔案

寫檔案:

  1. client向遠端NameNode發起RPC請求;
  2. NameNode檢查檔案是否存在,成功則為檔案建立一個記錄;
  3. client根據block size將檔案切分成多個packets,並以“data queue”的形式進行管理,另外獲取block的replication數;
  4. 以pipeline的形式將packets寫入所有的replication中,先寫入第一個DataNode,該DataNode把packets儲存之後,將其傳遞給pipeline的下一個DataNode,直到最後一個DataNode(流水線形式);
  5. 最後一個DataNode儲存成功後返回ack確認,在pipeline中傳遞到client;
  6. 傳輸過程中某個DataNode故障,則將當前pipeline關閉,移除故障的DataNode,剩餘的DataNode仍以pipeline的形式傳輸,根據replication數量,分配需要的DataNode;
  7. client完成資料的寫入之後,呼叫close()方法,關閉資料流

 

讀檔案:

  1. client向遠端namenode發起RPC請求;
  2. namenode返回檔案的block列表,元資料,DataNode地址等資訊;
  3. client選取離它最近的datanode讀取block;
  4. 讀取完當前block之後,關閉DataNode連線,開始讀取下一個最佳位置的block;
  5. 直到所有資料讀取完之後,關閉資料流。