Ubuntu如何监控HDFS集群状态
导读:Ubuntu监控HDFS集群状态 一 命令行快速巡检 进程存活检查:使用jps确认关键进程是否存在(如:NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager)。 集...
Ubuntu监控HDFS集群状态
一 命令行快速巡检
- 进程存活检查:使用jps确认关键进程是否存在(如:NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager)。
- 集群容量与节点:执行hdfs dfsadmin -report,查看总容量、已用、剩余、DataNode数量与状态等关键指标。
- 文件系统健康:执行hdfs fsck /,检查损坏块、缺失块、副本不足等问题;必要时使用hdfs fsck / -delete清理损坏块(谨慎操作)。
- 安全模式:使用hdfs dfsadmin -safemode get/enter/leave查看或控制安全模式,避免维护期误判。
- 数据均衡:执行start-balancer.sh触发HDFS Balancer,均衡各DataNode磁盘使用。
- 日志排查:实时查看NameNode/DataNode日志,定位异常堆栈与告警:
tail -f $HADOOP_HOME/logs/hadoop--namenode-.log
tail -f $HADOOP_HOME/logs/hadoop--datanode-.log
二 Web UI可视化监控
- NameNode Web UI:Hadoop 3.x 默认端口 9870(Hadoop 2.x 为 50070),可查看集群健康、DataNode列表、存储使用、启动时间等。
- ResourceManager Web UI:默认端口8088,用于查看YARN资源与作业运行情况(与HDFS健康联动)。
- DataNode Web UI:默认端口50075(Hadoop 2.x),用于查看单节点存储、块报告等。
- 访问方式:在浏览器打开http://:9870(或50070)与http://:8088。
三 第三方监控与可视化
- Prometheus + Grafana:通过Hadoop Exporter/JMX Exporter暴露JMX指标,Prometheus抓取并存储,Grafana构建容量、使用率、块健康等面板并设置告警。
- Zabbix:使用JMX 监控项或自定义脚本采集dfsadmin -report等指标,配置触发器实现阈值告警与可视化。
- Ambari / Cloudera Manager:适用于CDH/HDP发行版,提供一站式部署、监控、告警与诊断能力。
- Ganglia / ELK(Elasticsearch, Logstash, Kibana):Ganglia做时间序列监控;ELK用于日志采集、检索与可视化。
- Datadog / New Relic:商业化平台,支持HDFS与基础设施监控与APM联动。
四 自动化巡检与告警脚本示例
- 目标:定时采集集群容量、DataNode存活数、安全模式、不健康块数,异常时输出非零状态码并接入告警系统(如Zabbix、Nagios)。
- 示例脚本(保存为check_hdfs.sh,按需调整阈值与告警方式):
#!/usr/bin/env bash set -o pipefail NN_HOST="namenode.example.com" HADOOP_HOME="/usr/local/hadoop-3.3.6" # 按实际路径修改 PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 1) 进程存活 if ! jps | grep -qE "NameNode|DataNode"; then echo "CRITICAL: HDFS进程(NameNode/DataNode)未运行" exit 2 fi # 2) 安全模式 SAFEMODE=$(hdfs dfsadmin -safemode get 2> /dev/null | awk '{ print $NF} ') if [[ "$SAFEMODE" != "OFF" ]]; then echo "WARNING: HDFS处于安全模式: $SAFEMODE" exit 1 fi # 3) 集群报告 REPORT=$(hdfs dfsadmin -report 2> /dev/null) LIVE_DN=$(echo "$REPORT" | awk -F: '/Live datanodes/{ gsub(/ /,"",$2); print $2; exit} ') CAP_TOTAL=$(echo "$REPORT" | awk '/Configured Capacity/{ gsub(/,/,"",$3); print $3; exit} ') CAP_USED=$(echo "$REPORT" | awk '/DFS Used/{ gsub(/,/,"",$3); print $3; exit} ') CAP_REMAINING=$(echo "$REPORT" | awk '/DFS Remaining/{ gsub(/,/,"",$3); print $3; exit} ') UNDER_REPLICATED=$(echo "$REPORT" | awk '/Under replicated blocks/{ print $4; exit} ') MISSING_BLOCKS=$(echo "$REPORT" | awk '/Missing blocks/{ print $3; exit} ') echo "OK: LiveDataNodes=$LIVE_DN CapacityTotal=${ CAP_TOTAL} Used=${ CAP_USED} Remaining=${ CAP_REMAINING} UnderReplicated=${ UNDER_REPLICATED} Missing=${ MISSING_BLOCKS} " # 阈值示例:可用容量低于10GB或存在不健康块即告警 if (( $(echo "$CAP_REMAINING < 10737418240" | bc -l) )); then echo "CRITICAL: 可用容量不足10GB" exit 2 fi if [[ "$UNDER_REPLICATED" != "0" || "$MISSING_BLOCKS" != "0" ]]; then echo "CRITICAL: 存在不健康块(UnderReplicated=$UNDER_REPLICATED Missing=$MISSING_BLOCKS)" exit 2 fi exit 0 - 使用方式:
- 赋权并测试:chmod +x check_hdfs.sh & & ./check_hdfs.sh
- 接入Zabbix:将脚本作为UserParameter;接入Nagios:作为check_command;接入Prometheus:改为Exporter输出**/metrics**。
- 提示:脚本依赖bc做浮点比较,如未安装可执行:sudo apt-get install -y bc。
五 运维要点与常见问题
- 版本差异:Hadoop 3.x 与 2.x 的Web UI端口不同(如9870 vs 50070),告警与监控规则需按版本适配。
- 网络与防火墙:确保NameNode、DataNode、ResourceManager等节点间端口(如9870、8088、50075)与SSH互通,避免因防火墙导致采集失败。
- 日志与诊断:优先查看**$HADOOP_HOME/logs/下的NameNode/DataNode日志,结合fsck与dfsadmin -report**交叉验证。
- 数据均衡:磁盘使用差异较大时运行start-balancer.sh,并观察Balancer日志与带宽占用,避免影响业务。
- 安全模式:启动或恢复期间可能短暂进入安全模式,属正常行为;长时间不退出需排查块报告与DataNode连通性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu如何监控HDFS集群状态
本文地址: https://pptw.com/jishu/748661.html
