hadoop hdfs 數據讀寫

hdfs 文件上傳過程

  1. 向 namenode 請求上傳文件

  2. 響應可以上傳文件

  3. 向 namenode 請求, 上傳到哪幾臺 dataNode

  4. Namenode 返回,指定文件上傳的 datanode 節點數據

  5. 通過獲取到的 namenode 節點信息, 客戶端向一個節點發送通信, 開通數據通信管道

  6. 確認建立通道

  7. 創建 FSDataOutputStream

  8. 客戶端開始向 一個dataNode傳遞數據, 第一個 dataNode 將數據持久化到磁盤, 並通過內存, 向下一個 dataNode 傳遞副本, 直到傳遞最後一個指定 datanode

  9. 確認數據傳輸完成, 向前一個 namenode 或客戶端返回確認

  10. 客戶端將數據存儲到那麼datanode 節點的元數據信息傳遞給 namenode 存儲

    數據讀過程

網絡拓撲

在這裏插入圖片描述

namenode 向客戶端返回元數據下載位置, 是需要計算網絡節點距離的, 根據請求客戶端的位置計算最短距離:

  1. 計算同節點距離 例如: 集羣a-機架 1-node1, distance = 0
  2. 計算同機架距離 例如: 集羣a-機架 1-node1—> 集羣a-機架 1-node2, 機架相同, 各節點向上查找 1 distance=2
  3. 計算同集羣距離 例如: 集羣a-機架 1-node1—>集羣a-機架 2-node2, 集羣相同, 各節點向上查找 1 到機架, 再向上查找 1 到集羣 distance = 4
  4. 計算不同集羣距離 例如: 集羣a-機架 1-node1—>集羣b-機架 2-node2, 各節點向上查找 1 到機架, 再向上查找 1到集羣, 再向上查找 1 distance=6

機架感知(副本存儲節點選擇)

在這裏插入圖片描述

選擇存儲副本的節點, 例如有三個副本

  1. 副本一:根據 client 所處的客戶端, 找到相同節點, 存儲一份副本
  2. 副本二:根據副本一所處節點, 找到相同機架任意節點, 存儲一份副本
  3. 副本三:根據副本一所處節點, 找到不同機架任意節點, 存儲一份副本

hdfs 文件讀數據過程

在這裏插入圖片描述

  1. 客戶端向 namenode 請求下載數據
  2. namenode 返回目標文件的元數據
  3. 客戶端創建 FSDataInputStream 向獲取到的 dataNode 節點發起blk1數據請求
  4. dataNode 返回 blk1 數據
  5. 如果整個文件數據大於指定限制, 會有多個 block 塊, 向存儲了 blk2 的 namenode 發起數據請求
  6. namenode 返回數據
  7. 客戶端將獲取到的整個數據存儲到指定位置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章