温馨提示×

linux hdfs配置怎么监控

小樊
39
2026-09-22 20:00:02
栏目: 智能运维

在 Linux 环境下监控 HDFS(Hadoop Distributed File System),通常可以从 命令行监控、Web UI 监控、JMX/Metrics 监控、日志监控、第三方工具 几个层面来做。下面给你一个比较系统的总结。


一、HDFS 自带监控方式

1️⃣ 命令行监控(最常用)

(1)查看 HDFS 总体状态

hdfs dfsadmin -report

可以看到:

  • Live datanodes
  • Dead datanodes
  • 总容量 / 已用 / 剩余
  • 副本情况

(2)检查 HDFS 健康状态

hdfs fsck /

常用参数:

hdfs fsck / -files -blocks -locations

关注:

  • MISSING BLOCKS
  • CORRUPT BLOCKS
  • Under-replicated blocks

(3)查看 namenode / datanode 状态

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

(4)查看安全模式

hdfs dfsadmin -safemode get

2️⃣ Web UI 监控(最直观)

NameNode Web UI

http://namenode-host:9870

(Hadoop 3.x,2.x 是 50070)

可看:

  • Cluster Summary
  • Live Nodes
  • Block 情况
  • 各目录使用量

DataNode Web UI

http://datanode-host:9864

二、基于 Metrics / JMX 的监控(生产推荐)

1️⃣ Hadoop Metrics(核心)

Hadoop 自带 Metrics 系统,可输出到:

  • Ganglia
  • Graphite
  • Prometheus(需 exporter)
  • 文件 / 日志

配置文件:

$HADOOP_HOME/etc/hadoop/hadoop-metrics2.properties

示例(输出到文件):

*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
*.sink.file.filename=/var/log/hadoop/metrics.log

主要指标:

  • dfs.namenode
  • dfs.datanode
  • rpc

2️⃣ JMX 监控(推荐)

HDFS 各组件都暴露 JMX:

jps

找到 NameNode / DataNode 进程端口

访问:

http://namenode:9870/jmx

常用 JMX 指标:

  • Hadoop:service=NameNode,name=FSNamesystem
  • Hadoop:service=DataNode,name=FSDatasetState

可配合:

  • Prometheus + JMX Exporter
  • Zabbix JMX

三、日志监控(异常发现)

关键日志路径

$HADOOP_HOME/logs/

重点文件:

  • hadoop-*-namenode-*.log
  • hadoop-*-datanode-*.log

监控关键字:

  • ERROR
  • WARN
  • IOException
  • BlockMissing
  • Too many open files

可结合:

  • tail -f
  • ELK
  • Fluentd

四、第三方监控方案(企业常用)

✅ Prometheus + Grafana(最流行)

  • 使用 jmx_exporter
  • Grafana 官方 HDFS Dashboard

✅ Zabbix

  • 脚本调用 hdfs dfsadmin -report
  • 监控进程存活
  • JMX 模板

✅ ELK / Loki

  • 日志集中分析
  • 报警规则

五、常见监控指标建议

类别 指标
NameNode 存活、RPC 延迟、editlog 大小
DataNode 存活、磁盘使用率、心跳延迟
Block 缺失、损坏、欠副本
集群 容量使用率、写入/读取速率
安全 是否进入 safemode

六、简单示例:Shell 脚本监控 DataNode 是否掉线

#!/bin/bash
report=$(hdfs dfsadmin -report)
dead=$(echo "$report" | grep "Dead datanodes" | awk '{print $3}')

if [ "$dead" -gt 0 ]; then
  echo "ALERT: $dead datanodes dead"
fi

如果你愿意,我可以:

  • ✅ 给你一套 Prometheus + Grafana HDFS 监控配置
  • ✅ 给你 Zabbix HDFS 监控模板
  • ✅ 针对 Hadoop 2.x / 3.x 分别说明

你现在是 测试环境还是生产环境?用的 Hadoop 几?

0 踩