首先通过systemctl命令检查NameNode、DataNode等核心服务的运行状态,快速定位服务是否宕机:
systemctl status hadoop-hdfs-namenode # 检查NameNode状态
systemctl status hadoop-hdfs-datanode # 检查DataNode状态
若服务未启动,使用systemctl start命令启动对应服务;若启动失败,需结合日志进一步分析(参考日志分析部分)。
HDFS日志是故障排查的核心依据,重点查看NameNode(hadoop-*-namenode-*.log)、DataNode(hadoop-*-datanode-*.log)的WARN和ERROR级别日志:
/var/log/hadoop-hdfs/目录下(具体路径可通过hadoop version命令确认Hadoop安装目录)。tail -F实时监控日志,结合grep过滤关键错误(如ERROR|WARN|Exception),并通过awk统计高频错误(例如awk '/ERROR/{print $5}' hdfs.log | sort | uniq -c | sort -nr)。检查HDFS核心配置文件(hdfs-site.xml、core-site.xml),确认关键参数配置无误:
fs.defaultFS:HDFS的默认文件系统URI(如hdfs://namenode-host:9000);dfs.namenode.rpc-address:NameNode的RPC地址(需与集群节点主机名一致);dfs.datanode.data.dir:DataNode数据存储目录(需存在且具备读写权限);dfs.namenode.http-address:NameNode的HTTP地址(用于Web UI访问)。stop-dfs.sh → start-dfs.sh)。HDFS是分布式系统,节点间网络连通性至关重要:
ping命令测试NameNode与DataNode之间的网络连通性(如ping datanode-ip);ping不通,使用traceroute(或mtr)检查数据包路径,定位网络中断点;50070、DataNode的50010、50020),可通过firewall-cmd开放端口:firewall-cmd --add-port=50070/tcp --permanent # 开放NameNode Web UI端口
firewall-cmd --add-port=50010/tcp --permanent # 开放DataNode数据传输端口
firewall-cmd --reload # 重新加载防火墙规则
资源不足(CPU、内存、磁盘)会导致HDFS性能下降甚至服务宕机:
top或htop命令查看节点资源占用情况,若NameNode内存溢出(OutOfMemoryError),需调整JVM堆内存(在hadoop-env.sh中设置HADOOP_NAMENODE_OPTS,如-Xmx40g);df -h命令检查dfs.datanode.data.dir目录所在磁盘的剩余空间(建议保留20%以上空闲空间),若磁盘满,清理无用文件(如/tmp目录下的临时文件)。使用HDFS自带命令快速评估集群状态:
hdfs dfsadmin -report,查看DataNode数量、存活状态、数据块数量、副本率等信息(重点关注Live datanodes数量,若低于配置的dfs.namenode.replication.min,需处理DataNode宕机问题);hdfs fsck /path(如/根目录),检查数据块损坏、丢失情况(输出中的Under replicated blocks表示副本不足的块,Corrupt blocks表示损坏的块)。dfs.datanode.data.dir目录权限不足(需为hadoop用户所有)、磁盘空间满、Hadoop版本不一致。chown -R hadoop:hadoop /path/to/data/dir)、清理磁盘空间、统一集群Hadoop版本。NameNode is in safe mode)。hdfs dfsadmin -safemode leave命令退出安全模式(若无法退出,需等待DataNode上报足够数据块,或手动强制退出)。hdfs fsck显示Missing blocks或Corrupt blocks,Hive/Spark查询报BlockNotFoundException。dfs.replication≥3);hdfs fsck /path -delete删除损坏文件(需确认文件可重建);hdfs fsck /检查数据块状态,清理/tmp等临时目录;MissingBlocks、PendingReplicationBlocks、NameNode内存使用等关键指标,设置阈值告警;INSERT OVERWRITE或小文件合并工具(如Hadoop Archive)合并小文件,减少NameNode元数据压力;hdfs dfsadmin -fetchImage)和关键数据,避免数据丢失。