Hadoop DataNode小結

 

在分析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的指令.

 



 

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