畫圖詳解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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM