阅读量:63
如何监控Ubuntu上的Hadoop集群
监控Ubuntu上的Hadoop集群需结合自带工具、第三方系统及自定义方案,覆盖集群状态、资源使用、作业执行等全维度指标,以下是具体方法:
一、Hadoop自带监控工具
1. 命令行工具:快速获取集群状态
Hadoop提供了一系列命令行工具,可直接在终端执行,无需额外安装:
jps:列出所有Java进程,快速确认Hadoop核心组件(NameNode、DataNode、ResourceManager、NodeManager等)是否运行。例如,若看到NameNode和DataNode进程,则HDFS正常启动。hdfs dfsadmin -report:生成HDFS详细状态报告,包含集群总容量、已用空间、剩余空间及各DataNode的磁盘使用、数据块数量等信息,帮助判断存储资源是否均衡。yarn node -list:列出YARN集群中所有NodeManager的状态(RUNNING/UNHEALTHY),以及节点的HTTP地址,用于排查节点失联问题。
2. Web UI界面:可视化监控集群
Hadoop各组件提供Web界面,直观展示集群运行状态:
- NameNode Web UI:默认端口9870(Hadoop 3.x),可查看HDFS的文件系统树、数据块分布、NameNode内存使用及DataNode列表。
- ResourceManager Web UI:默认端口8088,可查看集群总资源(CPU、内存)、各NodeManager的状态、正在运行的应用程序(如MapReduce、Spark)及调度队列使用情况。
- NodeManager Web UI:默认端口8042,可查看该节点上运行的容器列表、资源使用率(CPU、内存)及本地目录健康状态。
二、第三方监控工具
1. Zabbix:基于JMX的深度监控
Zabbix通过JMX接口收集Hadoop的性能指标,适合企业级大规模集群:
- 配置Hadoop JMX:在
hadoop-env.sh中添加以下参数,启用JMX并设置端口(如9999):export HADOOP_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=" - 部署Zabbix Java Gateway:在Ubuntu上安装
zabbix-java-gateway,并在zabbix_java_gateway.conf中配置JMX连接端口(如10052)。 - 导入模板与监控:从Zabbix模板库下载Hadoop监控模板,导入后添加Hadoop主机,关联Gateway并配置JMX监控项(如NameNode内存使用、DataNode磁盘剩余空间)。
2. Prometheus + Grafana:实时监控与可视化
Prometheus负责收集指标,Grafana负责数据可视化,适合需要自定义仪表盘的场景:
- 启用JMX Exporter:下载
jmx_prometheus_javaagent,配置hadoop.yml文件(指定JMX端口及采集指标),并将agent添加到Hadoop启动命令中(如-javaagent:/path/to/jmx_prometheus_javaagent.jar=12345:/path/to/hadoop.yml)。 - 配置Prometheus:在
prometheus.yml中添加Hadoop监控目标(如NameNode、ResourceManager的JMX Exporter端口),启动Prometheus即可自动采集指标。 - 创建Grafana仪表盘:导入Hadoop监控模板(如Grafana社区提供的Hadoop模板),展示关键指标(如NameNode状态、ResourceManager运行作业数、NodeManager CPU使用率)。
3. Nagios:告警驱动的监控
Nagios通过插件实时监控Hadoop组件状态,适合需要及时告警的场景:
- 安装Nagios:在Ubuntu上安装Nagios Core(如
sudo apt-get install nagios3),配置Web访问权限。 - 添加Hadoop监控插件:下载Hadoop监控插件(如
nagios-hadoop-plugin),放置在/usr/lib/nagios/plugins/目录下,并赋予执行权限(chmod +x)。 - 配置主机与服务:在Nagios配置文件中添加Hadoop主机(如
hadoop_node),并定义服务监控项(如check_hadoop.sh脚本,检查NameNode是否存活、ResourceManager是否有运行作业)。
三、自定义监控方案
1. 编写Shell脚本:自动化状态检查
通过Shell脚本调用Hadoop命令行工具,定期检查集群状态并输出结果(如邮件、短信通知):
#!/bin/bash
# 检查NameNode状态
namenode_status=$(curl -s http://:50070/dfshealth.html | grep "Healthy")
# 检查ResourceManager状态
resourcemanager_status=$(curl -s http://:8088/cluster | grep "State")
echo "NameNode Status: $namenode_status"
echo "ResourceManager State: $resourcemanager_status"
将脚本设置为定时任务(如crontab -e添加*/5 * * * * /path/to/script.sh),每5分钟执行一次。
2. 关键指标监控:聚焦核心资源
监控Hadoop集群的关键指标,提前预警性能瓶颈:
- NameNode:状态(Healthy/Unhealthy)、内存使用(避免OOM)、文件系统操作次数(如读/写请求数)。
- DataNode:状态(Live/Dead)、磁盘使用(剩余空间
- ResourceManager:运行作业数(Pending作业过多需扩容)、资源分配(如YARN容器内存上限)。
- NodeManager:CPU使用率(避免过载)、内存使用率(避免OOM)、容器状态(Running/Failed)。