簡述hadoop和opc的通信「hadoop文檔倉庫」

先看下數據寫入的流程圖圖文詳解大數據Hadoop分散式文件系統HDFS文件寫流程

一個packet寫入流程

以文字形式梳理上述步驟

目標

  • 將一個本地文件a.txt上傳到hdfs文件系統中,hdfs中默認blockSize=128M
  • 複製因子默認為3

詳細步驟

  1. 客戶端根據配置信息與NameNode建立連接,並告訴NameNode,將a.txt文件上傳到hdfs的/tmp/a.txt路徑
  2. NameNode生成一個值為1的blockId(用來創建對應blockId的block文件),並根據複製因子3返回對應個數的可用來存放當前block的DataNode節點到客戶端,比如(DN1、DN2、DN3)
  3. 客戶端與DN1建立連接然後將blockId、DN2、DN3等相關數據先發送給DN1
  4. DN1接收到這個信息之後與DN2建立連接然後將blockID、DN3等相關數據發送給DN2
  5. DN2接收到這個數據之後與DN3建立連接然後將blockID發送給DN3
  6. 客戶端讀取本地文件內容並放入內存緩衝區中,當緩衝區滿,開始將緩衝區中的數據取出,並計算校驗和(每512位元組的實際數據會計算出一個4位元組的校驗和,這512位元組的數據和校驗和稱為一個chunk),然後這個chunk寫入到一個dataPacket中,當dataPacket中chunk的數量或實際數據大小達到一定閾值後將這個dataPacket發送給DN1並將這個dataPacket放入到一個ackQueue隊列中(當客戶端接收到DN1的確認寫入的信息之後才將這個dataPacket從隊列中移除)
  7. DN1接收到客戶端發送的數據之後,將dataPacket中的數據和校驗和寫入本地文件中,然後將dataPacket發送給DN2
  8. DN2接收到DN1發送的數據之後,將dataPacket中的數據和校驗和寫入本地文件中,然後dataPacket發送給DN3
  9. DN3接收到DN2發送的數據之後,將dataPacket中的數據和校驗和寫入本地文件中,然後發送確認信息給DN2
  10. DN2接收到DN3的確認消息之後將DN2自己的確認信息和DN3的確認信息發送給DN1
  11. DN1接收到DN2發來的確認信息後(包含DN2和DN3的確認信息),將DN1自己的確認信息和DN2、DN3的確認信息一起響應給客戶端
  12. 客戶端接收到信息之後對DN1、DN2、DN3的確認信息進行驗證,驗證成功,則將ackQueue中的dataPacket移除
  13. 客戶端繼續執行同樣的操作,直到發送出的真實數據量達到blockSize大小,此時一個block的寫入完畢

注意

  • 當客戶端發送數據的位元組數量達到一個blockSize之後,會向NameNode重新請求一個新的blockId及相關的DataNode信息哦

下面以流程圖的方式加深數據寫入DataNode過程的理解

圖示(以一個packet寫入為例)

圖文詳解大數據Hadoop分散式文件系統HDFS文件寫流程

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/268192.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:08
下一篇 2024-12-16 13:08

相關推薦

發表回復

登錄後才能評論