1. 程式人生 > 實用技巧 >Datanode 怎麼與 Namenode 通訊?

Datanode 怎麼與 Namenode 通訊?

在分析DataNode時, 因為DataNode上儲存的是資料塊, 因此DataNode主要是對資料塊進行操作.
A. DataNode的主要工作流程

  1. 客戶端和DataNode的通訊: 客戶端向DataNode的資料塊讀寫, 採用TCP/IP流介面(DataXceiver)進行資料傳輸
  2. 客戶端在檢測到DataNode異常, 主動發起的資料塊恢復, 客戶端會通過ClientDatanodeProtocol介面採用RPC呼叫的方式和DataNode通訊.
  3. 資料塊替換和拷貝, 由負載均衡器Balancer發起的, 是發生在DataNode之間. 也是通過DataXceiver進行資料傳輸
  4. DataNode在啟動後會向NameNode分別完成: 握手, 註冊, 心跳, 塊報告
    .
  5. NameNode根據DataNode的塊報告和心跳, 會返回給DataNode指令. 通過這種方式NameNode間接地和DataNode進行通訊.
    實際上NameNode作為Server端, 是不會主動去聯絡DataNode的, 只有作為客戶端的DataNode才會去聯絡NameNode.
    DataNode在接收到NameNode的指令資訊, 被要求去做: 重新向NameNode註冊, 資料塊傳輸, 恢復等.
  6. NameNode檢測到資料塊的副本個數不足. 要求DN執行資料塊傳輸(DNA_TRANSFERBLOCK), DataNode使用DataTransfer也是基於DataXceiver流介面.
  7. NameNode發起的資料塊恢復(DNA_RECOVERBLOCK), 是檢測到客戶端/租約錯誤, 恢復策略是選取參與到恢復過程中的資料塊的最小長度.
  8. 不管是客戶端錯誤會被NN返回資料塊恢復命令給DN執行恢復操作, 還是DN錯誤由客戶端主動觸發的資料塊恢復操作. 都會使用到
    InterdatanodeProtocol的兩個資料塊恢復方法(startBlockRecovery和updateBlock).
    因為資料塊恢復實際上是在DN之間根據恢復策略恢復到資料塊正常的狀態. 而且恢復時不像寫資料沒有資料來源. 所以是在DN之間進行通訊.

B. 從DataNode的功能來看:

  1. DataNode實現的兩個介面ClientDatanodeProtocol和InterDatanodeProtocol都用於資料塊恢復.
  2. 資料塊的其他操作使用TCP/IP流式介面來完成: DataXceiver(讀寫, 替換, 複製)和DataTransfer(傳輸).

C. 從DataNode的通訊來看:

  1. 客戶端可以向DataNode發起讀寫資料塊請求, 主動發起資料塊恢復.
  2. DataNode向NameNode握手, 註冊, 心跳, 塊報告. 並接收NameNode的指令.

原文出處:https://www.cnblogs.com/30go/