前言: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启动时必须指定配置文件(可为空,但不能缺失),用于定义指标采集规则(为空时采集所有默认指标)。操作步骤如下:
-
在Hadoop集群所有节点,创建Exporter配置文件目录:
mkdir -p /opt/hadoop/prometheus -
为每个核心组件创建空配置文件(后续可根据需求添加指标过滤规则):
touch /opt/hadoop/prometheus/namenode.yaml touch /opt/hadoop/prometheus/datanode.yaml touch /opt/hadoop/prometheus/resourcemanager.yaml touch /opt/hadoop/prometheus/nodemanager.yaml -
(可选)添加基础指标采集规则,以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,实现指标转换。操作如下:
-
下载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/ -
编辑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主配置文件,添加文件发现相关配置,步骤如下:
-
打开prometheus.yml文件(路径:$PROMETHEUS_HOME/prometheus.yml);
-
在
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秒刷新一次目标列表
- files:
- job_name: 'hadoop_cluster_monitor'
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数据源
-
启动Grafana服务(默认端口3000),登录Web界面(默认账号admin/admin);
-
添加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),步骤如下:
-
访问Grafana社区仪表盘页面(https://grafana.com/grafana/dashboards/);
-
搜索"Hadoop",选择适配JMX Exporter的模板(推荐ID:893、12319,亲测可用);
-
导入模板: ① 点击Grafana左侧"Dashboards → New → Import"; ② 输入模板ID(如893),点击"Load"; ③ 选择已配置的Prometheus数据源,点击"Import",即可生成完整的Hadoop监控仪表盘。
4.3 自定义仪表盘(进阶)
若社区模板不符合需求,可自定义仪表盘,核心步骤如下:
-
点击"Dashboards → New → Dashboard",添加"Panel";
-
选择"Prometheus"数据源,输入指标查询语句(如查询HDFS剩余容量百分比:
Hadoop_NameNode_PercentRemaining); -
选择可视化类型(折线图、 gauge图、表格等),设置图表标题、颜色、阈值(如剩余容量低于20%标红);
-
重复上述步骤,添加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集群的运维效率。
如果本文对你有帮助,欢迎点赞、收藏、评论,关注我获取更多大数据运维实操教程!