Ubuntu 上监控 HDFS 集群状态的高效方法
一 快速巡检命令
- 进程存活检查:使用 jps 确认 NameNode、DataNode 是否运行。
- 集群概览与健康:执行 hdfs dfsadmin -report,关注 Live DataNodes、Capacity/Used/Remaining、Block Pool 使用等。
- 文件系统完整性:执行 hdfs fsck /,检查缺失块、副本不足、损坏等问题。
- 服务状态脚本:使用 hadoop-daemon.sh status namenode/datanode 查看守护进程状态。
- 日志实时查看:
- NameNode:tail -f $HADOOP_HOME/logs/hadoop--namenode-.log
- DataNode:tail -f $HADOOP_HOME/logs/hadoop--datanode-.log
以上命令适合日常快速巡检与问题定位。
二 Web UI 可视化
- HDFS NameNode UI:访问 http://:50070(Hadoop 2.x)或 http://:9870(Hadoop 3.x),查看 DataNodes、DFS 使用率、启动时间、安全模式等。
- YARN ResourceManager UI:访问 http://:8088,查看 集群资源、应用列表、节点状态。
- NodeManager UI:访问 http://:8042,查看 节点资源 与 容器 信息。
- JobHistory Server:访问 http://:19888,查看 历史作业 与 任务 详情。
这些界面直观展示组件健康与资源使用,适合运维与开发联调。
三 关键监控指标与阈值建议
- NameNode JVM:
- HeapMemoryUsage ≥ 70% 警告、≥ 85% 严重;关注 GC 次数/时间。
- 命名系统:
- MissingBlocks 建议阈值:≥ 50 警告、≥ 500 严重。
- PendingReplicationBlocks:≥ 1000 警告、≥ 5000 严重。
- StaleDataNodes 比例:> 5% 需排查、> 10% 可能触发安全模式。
- 容量与节点:
- CapacityUsed/CapacityTotal 使用率持续高位需扩容或清理。
- NumLiveDataNodes 下降、NumDeadDataNodes 上升需立即排查网络/磁盘。
- VolumeFailuresTotal 增长表示磁盘故障增多。
- RPC 性能:
- RpcQueueTimeAvgTime:≥ 100ms 警告、≥ 300ms 严重。
- DataNode I/O:
- ReadBlockOpAvgTime / WriteBlockOpAvgTime 突增,排查 网络拥塞 或 磁盘瓶颈。
- 经验法则:
- 每百万块约需 300MB NameNode 堆内存;
- dfs.namenode.handler.count ≈ 集群规模 × 0.2;
- 单 Namespace 文件数建议 < 1 亿;
- 关键指标采集间隔 ≤ 15 秒。
以上阈值与经验可用于构建告警规则与容量规划基线。
四 第三方监控与告警集成
- Prometheus + Grafana:
- 通过 JMX Exporter 暴露 NameNode/DataNode 指标,Prometheus 拉取并存储,Grafana 构建 容量、块、RPC、JVM 等可视化大盘。
- 常用指标示例:Hadoop_NameNode_TotalFiles/TotalBlocks/PercentUsed/NumLiveDataNodes/NumDeadDataNodes/MissingBlocks、Hadoop_DataNode_ReadBlockOpAvgTime/WriteBlockOpAvgTime、JVM 内存与线程等。
- 企业级平台:
- Ambari:集中管理与监控 HDFS/YARN 组件。
- Zabbix/Nagios/Datadog/Ganglia:通过插件或接口采集指标并告警。
- JMX 直连排查:
- 访问 http://:9870/jmx 或 http://:50075/jmx 获取 JMX 指标;
- 可在 hadoop-env.sh 中为 HADOOP_NAMENODE_OPTS/HADOOP_DATANODE_OPTS 设置 JMX 端口以便远程采集。
上述方案适合长期可观测性与容量趋势分析。
五 日常巡检与自动化脚本示例
- 快速健康检查脚本(示例):
- 检查进程:
- jps | egrep ‘NameNode|DataNode’
- 集群报告:
- hdfs dfsadmin -report | egrep ‘Live datanodes|Capacity|Used|Remaining’
- 缺失块:
- hdfs fsck / | egrep ‘Missing|Corrupt|Under-replicated’
- 日志关键字告警:
- tail -n 200 $HADOOP_HOME/logs/hadoop--namenode-.log | grep -i ‘error|exception|fatal’
- 建议做法:将上述检查加入 cron(如每 5 分钟),结合 Prometheus Alertmanager 或 Zabbix 触发 邮件/企业微信/钉钉 告警,形成闭环。