Hadoop提供了内置的命令行工具和Web界面,适合快速查看集群基础状态:
hdfs dfsadmin命令获取集群信息,常用子命令包括:
hdfs dfsadmin -report:显示集群整体状态(DataNode数量、容量使用率、块数量等);hdfs dfsadmin -report -health:检查NameNode健康状态;hdfs dfsadmin -report -listCorruptFileBlocks:列出损坏的文件块;hdfs fsck /path/to/directory -files -blocks -locations:检查指定目录的文件块完整性及存储位置。http://<namenode-host>:9870访问,2.x版本为http://<namenode-host>:50070,可查看集群健康状况、DataNode列表、块报告、NameNode日志等;http://<resourcemanager-host>:8088):监控YARN任务执行情况,间接反映HDFS存储负载。第三方工具提供更全面的可视化与告警功能,适合生产环境:
/metrics)抓取指标(如NameNode内存使用、DataNode磁盘空间、块复制延迟等);check_nrpe插件调用自定义脚本(如check_hdfs.py),监控NameNode状态、DataNode数量、磁盘空间等指标;http://<ambari-server-host>:8080访问,需提前配置Hadoop集群。gmond收集节点指标,gweb展示;通过Hadoop HDFS Java API编写自定义程序,获取更精细的监控数据(如文件系统容量、块分布、节点负载等)。示例代码:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsStatus;
public class HDFSStatusChecker {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://namenode-host:9000"); // 替换为实际HDFS地址
        FileSystem fs = FileSystem.get(conf);
        if (fs instanceof org.apache.hadoop.hdfs.DistributedFileSystem) {
            FsStatus status = fs.getStatus();
            System.out.println("HDFS总容量: " + status.getCapacity() / (1024 * 1024 * 1024) + " GB");
            System.out.println("HDFS已使用: " + status.getUsed() / (1024 * 1024 * 1024) + " GB");
            System.out.println("HDFS剩余容量: " + status.getRemaining() / (1024 * 1024 * 1024) + " GB");
        }
        fs.close();
    }
}
编译后运行即可输出集群容量信息,可根据需求扩展为定期上报或告警。
Hadoop组件(NameNode、DataNode)通过JMX暴露内部指标,可通过以下方式查看:
50070 for NameNode、50075 for DataNode),查看内存使用、线程数、RPC请求量等指标;hdfs-site.xml中添加以下配置,指定JMX监听地址:<property>
    <name>dfs.namenode.jmx-address</name>
    <value>namenode-host:50070</value>
</property>
<property>
    <name>dfs.datanode.jmx-address</name>
    <value>datanode-host:50075</value>
</property>
重启HDFS服务后生效。通过Shell脚本定期执行HDFS命令,将结果写入日志或发送告警(如邮件、短信)。示例脚本:
#!/bin/bash
# 设置HADOOP_HOME环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
# 获取NameNode状态
namenode_status=$(hdfs dfsadmin -report | grep "NameNode" | awk '{print $NF}')
# 获取DataNode数量
datanode_count=$(hdfs dfsadmin -report | grep "Number of DataNodes" | awk '{print $NF}')
# 获取HDFS剩余容量(GB)
remaining_space=$(hdfs dfsadmin -report | grep "DFS Remaining" | awk '{print $NF}' | numfmt --from=iec)
# 输出结果到日志
echo "$(date) - NameNode状态: $namenode_status, DataNode数量: $datanode_count, 剩余空间: ${remaining_space}GB" >> /var/log/hdfs_monitor.log
# 简单告警逻辑(剩余空间小于10%时发送邮件)
if (( $(echo "$remaining_space < 10" | bc -l) )); then
    echo "HDFS剩余空间不足10%,当前剩余: ${remaining_space}GB" | mail -s "HDFS空间告警" admin@example.com
fi
将脚本添加到crontab中(如每5分钟执行一次),可实现定期监控。