首先通过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
)和关键数据,避免数据丢失。