[HDFS學習筆記]數據流操做

寫數據流程

微信截圖_20200224122025.png
注意:微信

  • 客戶端先實例化一個分佈式文件系統的類,並建立輸出流FSDataOutputStream的對象.
  1. FSDataOutputStream會向NameNode請求上傳文件到XXX路徑
  2. NameNoed 會先作一系列檢測,好比文件是否已存在,若存在則返回文件已存在的錯誤,用戶是否有權限。若沒有問題則返回能夠上傳的消息。
  3. 客戶端須要知道本身應該把文件上傳到哪一個DataNode,所以依然由FSDataOutputStream向NameNode 詢問.
  4. NameNode根據到客戶端的節點距離 返回相應的DataNode及位置 如dn1,dn2,dn3三個節點(備份)
  5. 客戶端向DataNode1請求創建Block傳輸通道,DataNode1收到請求後 向DataNode2一樣發送創建通道請求,DataNode2也向DataNode3發送...
  6. DataNode 從後往前依次迴應,最後返回給客戶端
  7. 客戶端開始以packet的形式傳遞數據給DataNode1, DataNode1把數據先存至內存隊列ByteBuff當中,並將該數據序列化後存至本地Block,同時ByteBuffer的數據會傳給DataNode2的ByteBuffer,...
  8. 數據接收完畢後 從後面依次應答 傳遞完畢,最後應答給客戶端, 客戶端再向NameNode迴應 傳輸完成的消息
再從代碼層面理解這個過程

微信截圖_20200224131039.png

微信截圖_20200224130613.png

微信截圖_20200224130955.png

讀數據過程

微信截圖_20200224142953.png
1.先建立一個DFS實例,向NameNode發送下載請求分佈式

  1. NameNode 返回該文件的元數據,包括了數據塊的起始位置
  2. 客戶端向DataNode 請求讀取數據塊
  3. 若是須要的數據塊在一臺機器上 則一次傳輸就返回。若該數據塊損壞或不在該DataNode上 則還須要去相應的DataNode以相同的方式請求數據
  4. 客戶端收到數據後寫入本地磁盤.
代碼層面

微信截圖_20200224144102.png

微信截圖_20200224144135.png

節點距離計算

節點距離: 兩個節點到達最小公共祖先的距離和
最小公共祖先 通常指 機架,集羣的路由器
例子:
微信截圖_20200224132147.pngspa

相關文章
相關標籤/搜索