1. 程式人生 > 實用技巧 >畫圖詳解HDFS檔案上傳流程

畫圖詳解HDFS檔案上傳流程

HDFS檔案上傳流程

  1. 客戶端向NameNode傳送資料上傳請求,這個請求當中包含一個重要的資訊就是檔案的長度資訊。假設該檔案的大小為207M.

    hadoop fs -put /test.txt /data
    
  2. NameNode接收到客戶端的請求之後會做一系列的檢查

    • 檔案是否存在,如果存在,報錯
    • 上傳檔案的父目錄是否存在,如果存在,報錯
    • 許可權等其他內容檢查
  3. NameNode在檢查通過之後會向客戶端返回儲存節點資訊,返回節點的原則如下:

    • 優先返回客戶端所在節點
    • 然後返回同客戶端相同機架的節點
    • 再返回不同機架的節點

    這裡假設返回給test.txt檔案的塊編號為blk_1,blk_2,並且

    blk_1所有副本對應的節點是hadoop01,hadoop02,hadoop03

    blk_2所有副本對應的節點是hadoop01,hadoop02,hadoop04

  4. 客戶端接收到NameNode返回的響應之後,會先對資料進行邏輯切片。即,

    blk_1 儲存前128M的資料, 0-127

    blk_2 儲存剩餘的資料, 128-206

  5. 開始準備上傳檔案,構建上傳通道pipeline。儲存同一個塊的所有節點構建一個數據流通道。

    即blk_1 對應一個通道,blk_2 對應一個通道。

  6. 開始真正上傳檔案,上傳時以package為單位進行上傳,並且在上傳的過程中對檔案進行物理切片。對於第一個塊,上傳的時候會先上傳到hadoop01,上傳到hadoop01時會先寫到快取中,快取中每接收到一個package的資料就會向下傳遞,同時快取中的資料會持續寫到磁碟中。

  7. 當第一個塊的資料上傳完成。即,hadoop01,hadoop02,hadoop03三個節點都上傳完畢之後,上傳通道關閉。

  8. 開始上傳第二個塊,重複5,6,7步。

  9. 所有資料上傳成功後,會向客戶端返回上傳結果。

  10. 客戶端向NameNode返回資訊,告知資料上傳成功

上傳過程中的異常

檔案上傳過程中,如果有一個節點上傳失敗,怎麼辦?hdfs會立即進行一次重試,如果還失敗,會將失敗的節點從pipeline中剔除,並將失敗的節點報告給NameNode。

比如原始的pipeline是:hadoop01--hadoop02--hadoop04,假如hadoop02節點上傳失敗,那麼會將hadoop02節點剔除,上傳通道就變成hadoop01-hadoop04。

hdfs最大的忍受度為至少有一個節點上傳成功,如果所有節點都上傳失敗,那麼這個時候NameNode會重新申請節點,重新構建pipeline。