大數據學習(六)HDFS讀寫機制 hadoop副本存儲節點選擇

上一篇我們講過了java的HDFSAPI操作,現在這篇blog分享一下HDFS的讀寫機制,和hadoop架構中的副本存儲節點的選擇

HDFS寫數據機制

在這裏插入圖片描述
簡述:

  1. 客戶端向namenode請求上傳文件,namenode檢查目標路徑的環境是否已存在。
  2. namenode返回上傳應答。
  3. block上傳到哪幾個DN節點。
  4. namenode返回3個節點,分別爲dn1、dn2、dn3。
  5. 客戶端請求dn1上傳數據,dn1收到請求會繼續調用dn2,然後dn2調用dn3,將這個通信管道建立完成
  6. dn1、dn2、dn3逐級應答
  7. 客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet爲單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待
  8. 當一個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的服務器。回到第三步。

簡單的源碼分析:

  1. 客戶端通過調用DistributedFileSystem的create方法創建新文件。

  2. DistributedFileSystem通過RPC調用namenode去創建一個新文件,創建前, namenode檢查環境。如果通過, namenode就會記錄下新文件,否則就會拋出IO異常。

  3. 前兩步結束後,會返回FSDataOutputStream的對象,與讀文件的時候相似, FSDataOutputStream被封裝成DFSOutputStream。DFSOutputStream可以協調namenode和 datanode。客戶端開始寫數據到DFSOutputStream,DFSOutputStream會把數據切成一個個小的packet,然後排成隊 列data quene(數據隊列)。

  4. DataStreamer會去處理接受data quene,它先詢問namenode這個新的block最適合存儲的在哪幾個datanode裏(比如重複數是3,那麼就找到3個最適合的 datanode),把他們排成一個pipeline。DataStreamer把packet按隊列輸出到管道的第一個datanode中,第一個 datanode又把packet輸出到第二個datanode中,以此類推。

  5. DFSOutputStream還有一個對列叫ack quene,也是由packet組成,等待datanode的收到響應,當pipeline中的所有datanode都表示已經收到的時候,這時ack quene纔會把對應的packet包移除掉。
    如果在寫的過程中某個datanode發生錯誤,會採取以下幾步:
    1)pipeline被關閉掉;
    2)爲了防止防止丟包ack quene裏的packet會同步到data quene裏;
    3)把產生錯誤的datanode上當前在寫但未完成的block刪掉;
    4)block剩下的部分被寫到剩下的兩個正常的datanode中;
    5)namenode找到另外的datanode去創建這個塊的複製。當然,這些操作對客戶端來說是無感知的。

  6. 客戶端完成寫數據後調用close方法關閉寫入流。

  7. DataStreamer把剩餘得包都刷到pipeline裏,然後等待ack信息,收到最後一個ack後,通知datanode把文件標視爲已完成。

HDFS讀機制

在這裏插入圖片描述
客戶端向namenode請求下載,返回文件塊所在的datanode地址。 挑選一臺datanode(就近原則,然後隨機)服務器,讀取數據。datanode開始傳輸數據給客戶端(從磁盤裏面讀取數據放入流,以packet爲單位來做校驗)。客戶端以packet爲單位接收,先在本地緩存,然後寫入目標文件。

副本存儲節點的選擇

我通過查閱網上的資料基本上有兩種說法,而且這兩種都是正確的,分別是高版本和低版本的的機制。
第一種:

  • 查看客戶端位置,如果在集羣中就選擇所在節點,若不在就隨機算則一個集羣中的節點dn1。
  • 第二個副本的位置就是在集羣中的除了dn1的節點隨機選擇一個dn2.
  • 第三個就要選擇dn2所在的機架,節點隨機選擇dn3.

第二種:

  • 第一個副本選擇和第一種相同
  • 第二個選擇dn1所在機架的隨機節點dn2
  • 第三個是不同與dn1、2的機架的隨機節點。

這裏我參考了一些資料:
https://www.cnblogs.com/wxisme/p/6270860.html
https://www.jianshu.com/p/8b4dc5a154e5
http://sem.tanzhouedu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章