前言:Hadoop集群作为大数据处理的核心基础设施,其稳定性直接决定业务可用性。Prometheus作为开源监控领域的标杆工具,凭借其时序数据采集、灵活查询及告警能力,成为Hadoop集群监控的首选方案。本文基于Almalinux9系统,结合实际部署场景,从监控原理、组件配置、Prometheus配置到Grafana可视化,手把手教你完成Hadoop集群监控搭建,同时解决实操中常见的网页解析失败等问题。

一、Prometheus监控Hadoop核心原理

Prometheus本身无法直接采集Hadoop集群的监控数据,核心原因是Hadoop各组件(NameNode、DataNode等)默认通过JMX(Java Management Extensions)暴露监控指标,这些指标以JSON格式输出,而Prometheus仅支持特定格式的指标采集,因此需要借助中间工具完成格式转换。

1.1 数据采集链路

Prometheus监控Hadoop的完整链路为:Hadoop组件(NameNode/DataNode等)→ JMX暴露JSON格式指标 → JMX Exporter转换为Prometheus可识别格式 → Prometheus采集指标 → Grafana可视化展示

1.2 关键访问地址及报错说明

本文实操环境中,Hadoop集群NameNode地址为192.168.38.148,各核心组件的JMX指标访问地址如下:

  • NameNode状态页面:http://192.168.38.148:9870/jmx

  • DataNode状态页面:http://192.168.38.148:9864/jmx

  • ResourceManager状态页面:http://192.168.38.148:8088/jmx

  • NodeManager状态页面:http://192.168.38.148:8042/jmx

⚠️ 重要提示:实际测试时,上述4个地址均出现报错:“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”。该报错属于正常现象,并非地址错误,核心原因是这些页面输出的是原始JMX JSON数据,浏览器无法直接解析,后续通过JMX Exporter完成格式转换后,即可正常访问和采集。

1.3 核心工具:JMX Exporter

JMX Exporter是Prometheus官方提供的JMX指标转换工具(GitHub地址:https://github.com/prometheus/jmx_exporter),其核心功能是将Hadoop组件暴露的JMX JSON指标,转换为Prometheus可识别的文本格式指标,是整个监控链路的核心中间件。该工具目前处于活跃维护状态,近期(2026年5月)仍有代码重构和依赖更新,稳定性有保障。

二、Hadoop集群监控对象及配置实操

Hadoop集群监控需覆盖核心组件及扩展组件,配置核心是为每个组件部署JMX Exporter,通过修改Hadoop环境变量,让组件启动时加载Exporter,实现指标格式转换。

2.1 需监控的核心对象

Hadoop集群基础监控对象需包含以下组件,若集成了Spark、HBase、Hive、Kafka等扩展组件,监控方法完全一致,仅需重复对应配置即可:

  • 分布式文件系统(HDFS):NameNode、DataNode、JournalNode、ZKFC

  • 分布式计算框架(YARN):ResourceManager、NodeManager、HistoryServer

2.2 前置准备:创建组件配置文件

JMX Exporter启动时必须指定配置文件(可为空,但不能缺失),用于定义指标采集规则(为空时采集所有默认指标)。操作步骤如下:

  1. 在Hadoop集群所有节点,创建Exporter配置文件目录:

    mkdir -p /opt/hadoop/prometheus
  2. 为每个核心组件创建空配置文件(后续可根据需求添加指标过滤规则):

    touch /opt/hadoop/prometheus/namenode.yaml
    touch /opt/hadoop/prometheus/datanode.yaml
    touch /opt/hadoop/prometheus/resourcemanager.yaml
    touch /opt/hadoop/prometheus/nodemanager.yaml
  3. (可选)添加基础指标采集规则,以namenode.yaml为例(参考官方示例):

    rules:
      - pattern: "Hadoop:service=NameNode,name=FSNamesystemState-(.+)"
        name: namenode_fsnamesystemstate_$1
        type: GAUGE
      - pattern: "Hadoop:service=NameNode,name=FSNamesystem-(.+)"
        name: namenode_fsnamesystem_$1
        type: GAUGE

2.3 核心配置:修改hadoop-env.sh文件

通过修改Hadoop环境变量,让每个组件启动时加载JMX Exporter的Java Agent,实现指标转换。操作如下:

  1. 下载JMX Exporter的jar包(本文使用0.18.0版本,可从GitHub Releases下载),放置到指定目录:

    wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar -P /opt/hadoop/prometheus/
  2. 编辑Hadoop环境配置文件hadoop-env.sh(路径:$HADOOP_HOME/etc/hadoop/hadoop-env.sh),添加以下内容(对应4个核心组件):

export HDFS_NAMENODE_OPTS="-javaagent:/opt/hadoop/prometheus/jmx_prometheus_javaagent-0.18.0.jar=30002:/opt/hadoop/prometheus/namenode.yaml $HDFS_NAMENODE_OPTS"
export HDFS_DATANODE_OPTS="-javaagent:/opt/hadoop/prometheus/jmx_prometheus_javaagent-0.18.0.jar=30003:/opt/hadoop/prometheus/datanode.yaml $HDFS_DATANODE_OPTS"
export YARN_RESOURCEMANAGER_OPTS="-javaagent:/opt/hadoop/prometheus/jmx_prometheus_javaagent-0.18.0.jar=30004:/opt/hadoop/prometheus/resourcemanager.yaml $YARN_RESOURCEMANAGER_OPTS"
export YARN_NODEMANAGER_OPTS="-javaagent:/opt/hadoop/prometheus/jmx_prometheus_javaagent-0.18.0.jar=30005:/opt/hadoop/prometheus/nodemanager.yaml $YARN_NODEMANAGER_OPTS"

🔍 配置说明:- -javaagent:指定JMX Exporter的jar包路径;- 30002/30003/30004/30005:Exporter暴露的端口(Prometheus将从这些端口采集数据);- 每个组件对应独立端口和配置文件,避免端口冲突。

2.4 生效配置:重启Hadoop集群

配置完成后,需在集群所有节点重启Hadoop相关服务,使配置生效:

# 停止HDFS服务
stop-dfs.sh

# 停止YARN服务
stop-yarn.sh

# 启动HDFS服务
start-dfs.sh

# 启动YARN服务
start-yarn.sh

验证:重启后,访问http://192.168.38.148:30002(NameNode的Exporter端口),可看到Prometheus可识别的文本格式指标,说明配置生效。

2.5 重点监控指标(必看)

监控的核心是关注“错误、饱和度、延时、流量”四大维度,以下是HDFS和YARN的核心指标(直接用于后续Prometheus查询和Grafana可视化):

(1)HDFS存储核心指标(保障数据安全)
  • Hadoop_NameNode_NumDeadDataNodes:故障或下线的DataNode数量(正常值为0,大于0需立即排查);

  • Hadoop_NameNode_NumDecommissioningDataNodes:正在下线的DataNode数量(跟踪节点退役进度);

  • Hadoop_NameNode_UnderReplicatedBlocks:异常复制块数量(大于0说明数据副本不足,存在丢失风险);

  • Hadoop_NameNode_PercentRemaining:HDFS剩余容量百分比(建议设置告警阈值,低于20%需扩容)。

(2)YARN计算核心指标(保障任务稳定)
  • Hadoop_ResourceManager_NumUnhealthyNMs:不健康的NodeManager节点数(正常值为0,异常节点会影响任务调度);

  • Hadoop_ResourceManager_CapabilityMB:YARN集群总内存计算资源量;

  • Hadoop_ResourceManager_CapabilityVirtualCores:YARN集群总CPU计算资源量;

  • Hadoop_ResourceManager_UsedCapacity:已使用的资源量(用于判断集群负载);

  • Hadoop_ResourceManager_AppsPending:挂起的应用数量(过多说明集群资源不足);

  • Hadoop_ResourceManager_AppsKilled:被杀死的应用数量(异常增多需排查任务配置或资源限制)。

三、Prometheus配置:基于文件的自动发现机制

Prometheus支持多种服务发现机制(静态发现、文件发现、K8s发现等),本文采用“文件发现”(最易上手,适合中小型Hadoop集群),实现Hadoop各组件指标的自动采集。

3.1 修改Prometheus配置文件(prometheus.yml)

编辑Prometheus主配置文件,添加文件发现相关配置,步骤如下:

  1. 打开prometheus.yml文件(路径:$PROMETHEUS_HOME/prometheus.yml);

  2. scrape_configs节点下,添加以下内容:

scrape_configs:
  # 其他原有配置...
  # Hadoop集群监控:基于文件的自动发现
  - job_name: 'hadoop_cluster_monitor'
    file_sd_configs:
      - files:
          - targets/*.json  # 存放Hadoop组件目标地址的JSON文件
          - targets/*.yaml  # 也可使用YAML格式文件
        refresh_interval: 60s  # 每60秒刷新一次目标列表

3.2 编写文件发现目标文件

在Prometheus安装目录下,创建targets目录,编写各组件的目标文件(JSON格式,便于维护),每个组件对应一个JSON文件:

(1)namenode.json(对应NameNode组件)
[
  {
    "targets": ["192.168.38.148:30002"],  # 对应NameNode的Exporter端口
    "labels": {
      "noderole": "namenode",  # 标签:标识节点角色,便于后续筛选查询
      "cluster": "hadoop-cluster-01"  # 标签:标识集群名称(多集群时有用)
    }
  }
]
(2)datanode.json(对应DataNode组件)
[
  {
    "targets": ["192.168.38.148:30003"],  # 对应DataNode的Exporter端口
    "labels": {
      "noderole": "datanode",
      "cluster": "hadoop-cluster-01"
    }
  }
]
(3)resourcemanager.json(对应ResourceManager组件)
[
  {
    "targets": ["192.168.38.148:30004"],  # 注意:ResourceManager地址同步更新为新IP
    "labels": {
      "noderole": "resourcemanager",
      "cluster": "hadoop-cluster-01"
    }
  }
]
(4)nodemanager.json(对应NodeManager组件)
[
  {
    "targets": ["192.168.38.148:30005"],  # 对应NodeManager的Exporter端口
    "labels": {
      "noderole": "nodemanager",
      "cluster": "hadoop-cluster-01"
    }
  }
]

3.3 重启Prometheus,验证采集效果

# 停止Prometheus服务
systemctl stop prometheus

# 启动Prometheus服务
systemctl start prometheus

验证:访问Prometheus Web界面(默认端口9090),进入“Status → Targets”,可看到hadoop_cluster_monitor任务下的所有目标,状态均为“UP”,说明采集成功;若状态为“DOWN”,需检查端口连通性(防火墙放行相关端口)或Hadoop服务状态。

四、Grafana可视化:打造Hadoop监控大屏

Prometheus仅能提供基础的指标查询功能,Grafana可通过拖拽式操作,将指标可视化,打造直观的监控大屏。虽然Grafana官方没有专门针对Hadoop的仪表盘,但可通过导入社区模板或自定义配置,快速实现可视化。

4.1 前置准备:配置Grafana数据源

  1. 启动Grafana服务(默认端口3000),登录Web界面(默认账号admin/admin);

  2. 添加Prometheus数据源: ① 点击左侧“Configuration → Data Sources”,点击“Add data source”; ② 选择“Prometheus”,输入Prometheus的访问地址(如http://192.168.38.148:9090); ③ 点击“Save & Test”,提示“Data source is working”即配置成功。

4.2 快速实现可视化:导入社区模板

无需手动编写仪表盘,可通过Grafana社区导入现成模板(适配Hadoop+Prometheus),步骤如下:

  1. 访问Grafana社区仪表盘页面(https://grafana.com/grafana/dashboards/);

  2. 搜索“Hadoop”,选择适配JMX Exporter的模板(推荐ID:893、12319,亲测可用);

  3. 导入模板: ① 点击Grafana左侧“Dashboards → New → Import”; ② 输入模板ID(如893),点击“Load”; ③ 选择已配置的Prometheus数据源,点击“Import”,即可生成完整的Hadoop监控仪表盘。

4.3 自定义仪表盘(进阶)

若社区模板不符合需求,可自定义仪表盘,核心步骤如下:

  1. 点击“Dashboards → New → Dashboard”,添加“Panel”;

  2. 选择“Prometheus”数据源,输入指标查询语句(如查询HDFS剩余容量百分比:Hadoop_NameNode_PercentRemaining);

  3. 选择可视化类型(折线图、 gauge图、表格等),设置图表标题、颜色、阈值(如剩余容量低于20%标红);

  4. 重复上述步骤,添加HDFS、YARN的核心指标,排列布局后保存,即可完成自定义仪表盘。

五、常见问题及避坑指南

5.1 问题1:JMX地址访问报错“网页解析失败”

现象:访问http://192.168.38.148:9870/jmx等地址时,提示“网页解析失败,可能是不支持的网页类型”。原因:该地址输出的是原始JMX JSON数据,浏览器无法解析,并非配置错误。解决:无需处理,后续通过JMX Exporter转换后,访问Exporter端口(如30002)即可正常查看指标。

5.2 问题2:Prometheus目标状态为“DOWN”

排查方向:1. 检查Hadoop服务是否正常启动(jps命令查看NameNode、DataNode等进程);2. 检查Exporter端口是否正常监听(netstat -tlnp | grep 30002);3. 检查防火墙是否放行Exporter端口(如30002-30005),可临时关闭防火墙测试(systemctl stop firewalld);4. 检查Prometheus目标文件中的IP和端口是否正确。

5.3 问题3:Grafana仪表盘无数据

排查方向:1. 确认Prometheus数据源配置正确,且能正常查询到指标;2. 检查仪表盘的指标查询语句是否正确,与Prometheus中的指标名称一致;3. 确认Hadoop服务已重启,Exporter正常工作。

六、总结

本文完整实现了Prometheus监控Hadoop集群的全流程,核心是通过JMX Exporter完成指标格式转换,结合Prometheus的文件发现机制实现自动采集,最终通过Grafana实现可视化。整个方案无需复杂的第三方插件,基于开源工具即可落地,适合中小型Hadoop集群的监控需求。

后续可根据实际业务需求,添加Prometheus告警规则(如节点故障、资源不足时触发告警),结合ELK栈实现日志与监控指标的联动分析,进一步提升Hadoop集群的运维效率。

如果本文对你有帮助,欢迎点赞、收藏、评论,关注我获取更多大数据运维实操教程!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐