Linux下Hadoop性能监控实践
一 监控体系与工具选型
- 原生与系统层
- 使用 Hadoop 的 Web UI(如 NameNode 50070/9870、ResourceManager 8088)快速查看健康与负载;配合命令行工具 hdfs dfsadmin -report、yarn node -list -all、yarn application -list、mapred job -list 获取资源与作业状态;通过 JMX 暴露 JVM/组件指标;日志集中在 $HADOOP_HOME/logs,可用 tail/grep 实时排查。
- 指标与可视化
- 以 Prometheus 采集时序指标,用 Grafana 做可视化与告警面板,适合长期趋势与容量规划。
- 集群运维平台
- Apache Ambari 提供集中式监控、管理与生命周期管理,适合多组件统一运维。
- 传统监控
- Ganglia、Zabbix、Nagios 覆盖节点资源与健康检查,可与 Hadoop 集成实现告警联动。
二 关键监控指标与查看方法
| 维度 |
关键指标 |
主要查看方式 |
| HDFS |
Capacity/Used/Remaining、Missing/Under-Replicated Blocks、DataNode 数量与存活、块报告延迟 |
NameNode UI(50070/9870)、hdfs dfsadmin -report、hdfs fsck |
| YARN |
集群/队列资源使用(Memory/VCores)、NodeManager 健康、应用与容器状态 |
ResourceManager UI(8088)、yarn node -list -all、yarn application -list |
| 作业 |
Map/Reduce 进度、失败/重试次数、任务运行时间 |
ResourceManager UI、mapred job -list |
| JVM/主机 |
GC 次数/时间、堆内存、CPU/内存/磁盘 IO/网络 |
JMX(JConsole/VisualVM)、Ganglia/Zabbix、Linux sar/pidstat |
| 日志 |
异常/错误/慢操作 |
$HADOOP_HOME/logs、tail/grep、日志聚合 |
三 快速落地步骤 Prometheus Grafana
- 步骤1 暴露指标
- 方案A(推荐):启用 JMX,通过 JMX Exporter 将 NameNode/DataNode/ResourceManager/NodeManager 指标转为 HTTP /metrics,供 Prometheus 抓取。
- 方案B:启用 Hadoop Metrics2 的 PrometheusSink(需 Hadoop 版本支持),直接以 HTTP /metrics 暴露。
- 步骤2 配置 Prometheus 抓取
- 在 prometheus.yml 增加 job,例如:
- job_name: ‘hadoop’
static_configs:
- targets: [‘namenode:9104’,‘datanode1:9104’,‘datanode2:9104’,‘resourcemanager:9105’,‘nodemanager1:9105’]
- 步骤3 配置 Grafana
- 添加 Prometheus 数据源(URL 如 http://prometheus:9090),导入 Hadoop/HDFS/YARN 社区或自建 Dashboard,并设置阈值告警。
四 告警与日志最佳实践
- 告警规则示例(Prometheus)
- HDFS 容量告警:当剩余容量低于阈值
- ALERT HDFSLowCapacity
expr: 1 - (hdfs_capacity_used / hdfs_capacity_total) < 0.15
for: 5m
labels: severity=critical
annotations: summary=“HDFS 剩余容量不足 15%”
- NodeManager 离线
- ALERT NodeManagerDown
expr: up{job=“hadoop”, component=“nodemanager”} == 0
for: 2m
labels: severity=warning
annotations: summary=“NodeManager {{ $labels.instance }} 离线”
- 日志与诊断
- 启用 日志聚合,将各节点日志汇总到集中存储;使用 Grep/Tail 快速定位异常;对关键路径(如 NameNode RPC、YARN 调度)设置 日志级别 与保留策略,便于审计与回溯。
五 常见问题排查路径
- NameNode 高负载或响应慢
- 查看 NameNode UI 的堆内存与 GC;检查 块报告 是否积压;结合 JMX 观察 RPC 队列与处理时延;必要时优化 JVM 参数 与 NameNode 堆大小。
- 数据可用性问题
- 使用 hdfs dfsadmin -report 与 hdfs fsck 检查 Missing/Under-Replicated Blocks;排查 DataNode 磁盘/网络;确认 副本数 与 机架感知 配置合理。
- YARN 资源不足或应用排队
- 在 ResourceManager UI 检查 队列容量/已用 与 NodeManager 健康;核对 yarn.nodemanager.resource.memory-mb、yarn.scheduler.minimum-allocation-mb 等资源配置;分析 Container 失败/抢占 原因。