目錄
1 DataNode的角色定位
2 DataNode的核心職責
2.1 數據塊管理
2.2 與NameNode的協作
3 DataNode的存儲機制
3.1 數據存儲目錄結構
3.2 數據塊文件組織
4 DataNode的工作流程
4.1 數據寫入流程
4.2 數據讀取流程
5 DataNode的健康管理
5.1 心跳機制(Heartbeat)
5.2 塊匯報(BlockReport)
5.3 故障檢測與恢復
5.4 磁盤健康管理
5.5 運維命令與監控
6 DataNode的配置優化
6.1 關鍵配置參數
6.2 多目錄配置策略
7 常見問題處理
7.1 磁盤空間不足
7.2 塊損壞恢復
8 DataNode與HDFS生態
9 總結
1 DataNode的角色定位
DataNode是HDFS的數據存儲工作節點,負責實際的數據塊存儲與管理。它在HDFS架構中扮演著"體力勞動者"的角色,與NameNode的"管理者"角色形成鮮明對比。

2 DataNode的核心職責
2.1 數據塊管理
- 存儲實際數據塊(默認128MB/塊)
- 維護塊到文件的映射關系
- 執行數據塊的創建、刪除和復制
2.2 與NameNode的協作
- 定期心跳匯報(3秒一次)
- 全量塊報告(默認6小時一次)
- 增量塊報告(塊變化時實時匯報)

3 DataNode的存儲機制
3.1 數據存儲目錄結構
${dfs.datanode.data.dir}/
├── current/
│ ├── BP-526805057-192.168.10.32-1711980876842/
│ │ ├── current/
│ │ │ ├── VERSION
│ │ │ ├── finalized/
│ │ │ │ ├── subdir0/
│ │ │ │ │ ├── blk_1073741825
│ │ │ │ │ ├── blk_1073741825_1001.meta
3.2 數據塊文件組織

4 DataNode的工作流程

4.1 數據寫入流程

4.2 數據讀取流程

5 DataNode的健康管理
5.1 心跳機制(Heartbeat)
DataNode定期向NameNode發送心跳信號(默認3 秒一次),包含:
- 存儲狀態剩余磁盤空間、負載情況
- 數據塊列表:當前存儲的所有Block ID
- 緩存信息:如果啟用了緩存
NameNode的響應可能包括:
- 指令刪除某些數據塊(如副本過多)
- 要求復制缺失的副本(如某些Block副本不足)
- 觸發Balancer進行數據均衡
心跳超時判定:
- 如果超過10分鐘(默認)?未收到心跳,NameNode會判定該DataNode宕機
- 宕機的DataNode上的數據塊會被標記為“不可用”,并觸發副本恢復
5.2 塊匯報(BlockReport)
DataNode會定期(默認6小時)向NameNode發送完整的BlockReport,包含:
- 所有存儲的Block ID
- 每個Block的長度、校驗和、狀態
作用:
- 幫助NameNode維護塊映射表(BlockMap)
- 檢測?副本缺失或損壞?的情況
- 確保數據一致性
5.3 故障檢測與恢復
- DataNode宕機處理

- NameNode 會從存活的DataNode中選擇副本進行重新復制
- 恢復優先級:先恢復高優先級數據(如系統關鍵文件)
- 數據損壞檢測
- 客戶端讀取數據時,會校驗Checksum,如果發現損壞:
- 自動切換到其他副本讀取
- 報告NameNode,觸發副本修復
- DataNode在磁盤掃描時也會檢測損壞塊,并上報NameNode
5.4 磁盤健康管理
DataNode會監控本地磁盤狀態,避免因磁盤故障導致數據丟失:壞盤檢測:
- 通過定期磁盤掃描或操作系統IO錯誤?檢測壞盤
- 如果某個磁盤故障,DataNode會停止向該磁盤寫入新數據,并且上報NameNode,遷移受影響的數據塊
存儲策略:
- 多磁盤存儲:DataNode可以配置多個存儲目錄(dfs.datanode.data.dir),HDFS會輪詢寫入不同磁盤,避免單盤過載
- 磁盤均衡:HDFS提供diskbalancer工具,優化數據分布,防止部分磁盤寫滿
5.5 運維命令與監控
- 關鍵運維命令
命令 | 作用 |
hdfs dfsadmin -report | 查看 DataNode 狀態 |
hdfs fsck / | 檢查數據塊健康狀態 |
hdfs dfs -count -q /path | 查看存儲配額和剩余空間 |
hdfs diskbalancer -plan | 執行磁盤均衡 |
- 監控指標
HDFS指標:
- Live Nodes:存活的DataNode數量
- Dead Nodes:宕機的DataNode數量
- Under Replicated Blocks:副本不足的塊數
- Corrupt Blocks:損壞的塊數
DataNode本地監控:
- 磁盤使用率(df -h)
- 網絡流量(iftop/nload)
- 內存和CPU使用率(top/htop)
6 DataNode的配置優化
6.1 關鍵配置參數
<!-- hdfs-site.xml -->
<property><name>dfs.datanode.data.dir</name><value>/data1/hdfs,/data2/hdfs</value>
</property>
<property><name>dfs.datanode.balance.bandwidthPerSec</name><value>10m</value> <!-- 平衡帶寬 -->
</property>
6.2 多目錄配置策略

7 常見問題處理
7.1 磁盤空間不足
# 查看各目錄使用情況
hdfs dfsadmin -report
# 臨時解決方案
hdfs dfsadmin -setSpaceQuota 1T /user/data
7.2 塊損壞恢復
# 檢查損壞塊
hdfs fsck / -list-corruptfileblocks
# 刪除損壞塊
hdfs fsck / -delete
8 DataNode與HDFS生態

9 總結
DataNode作為HDFS的數據存儲基石,其穩定運行直接關系到整個HDFS集群的可靠性。理解DataNode的工作機制,對于優化存儲性能、排查數據問題具有重要意義。