在 Linux 环境下监控 HDFS(Hadoop Distributed File System),通常可以从 命令行监控、Web UI 监控、JMX/Metrics 监控、日志监控、第三方工具 几个层面来做。下面给你一个比较系统的总结。
hdfs dfsadmin -report
可以看到:
hdfs fsck /
常用参数:
hdfs fsck / -files -blocks -locations
关注:
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
hdfs dfsadmin -safemode get
http://namenode-host:9870
(Hadoop 3.x,2.x 是 50070)
可看:
http://datanode-host:9864
Hadoop 自带 Metrics 系统,可输出到:
配置文件:
$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.namenodedfs.datanoderpcHDFS 各组件都暴露 JMX:
jps
找到 NameNode / DataNode 进程端口
访问:
http://namenode:9870/jmx
常用 JMX 指标:
Hadoop:service=NameNode,name=FSNamesystemHadoop:service=DataNode,name=FSDatasetState可配合:
$HADOOP_HOME/logs/
重点文件:
hadoop-*-namenode-*.loghadoop-*-datanode-*.log监控关键字:
可结合:
tail -fjmx_exporterhdfs dfsadmin -report| 类别 | 指标 |
|---|---|
| NameNode | 存活、RPC 延迟、editlog 大小 |
| DataNode | 存活、磁盘使用率、心跳延迟 |
| Block | 缺失、损坏、欠副本 |
| 集群 | 容量使用率、写入/读取速率 |
| 安全 | 是否进入 safemode |
#!/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
如果你愿意,我可以:
你现在是 测试环境还是生产环境?用的 Hadoop 几?