Ubuntu环境下HDFS故障排查步骤
使用systemctl命令查看NameNode、DataNode等核心服务的运行状态,确认服务是否已启动。若服务未运行,尝试手动启动并观察报错信息。
示例命令:
systemctl status hadoop-hdfs-namenode # 检查NameNode状态
systemctl status hadoop-hdfs-datanode # 检查DataNode状态
systemctl start hadoop-hdfs-namenode # 启动NameNode(若未运行)
HDFS的日志文件记录了详细的错误信息,是排查问题的核心依据。重点查看以下日志:
/var/log/hadoop-hdfs/hadoop-<username>-namenode-<hostname>.log/var/log/hadoop-hdfs/hadoop-<username>-datanode-<hostname>.logtail -f命令实时跟踪日志输出,定位关键词(如“ERROR”“Exception”)。tail -f /var/log/hadoop-hdfs/hadoop-hadoop-namenode-ubuntu.log
检查HDFS核心配置文件(core-site.xml、hdfs-site.xml)的关键配置项是否符合要求,避免因配置错误导致服务异常:
core-site.xml:确认fs.defaultFS(NameNode RPC地址,如hdfs://localhost:9000)设置正确;hdfs-site.xml:确认dfs.namenode.name.dir(NameNode元数据目录)、dfs.datanode.data.dir(DataNode数据目录)路径存在且具备读写权限;mapred-site.xml/yarn-site.xml(可选):若涉及MapReduce或YARN,检查相关配置(如mapreduce.framework.name)是否与HDFS兼容。HDFS集群节点间需通过网络通信,需确保:
ping命令测试NameNode与DataNode之间的连通性;netstat -tuln或ss -tuln检查HDFS关键端口(如NameNode的9000、DataNode的50010)是否正常监听,且未被其他进程占用。ping <datanode_ip> # 测试DataNode连通性
netstat -tuln | grep 9000 # 检查NameNode端口
df -h命令检查DataNode磁盘空间使用情况,确保剩余空间大于HDFS配置的dfs.datanode.du.reserved(默认10%);dfs.namenode.name.dir、dfs.datanode.data.dir)的所属用户为hadoop(或运行HDFS的用户),且具备读写权限(chmod -R 755)。df -h # 查看磁盘空间
ls -ld /data/hdfs/namenode # 检查NameNode目录权限
chown -R hadoop:hadoop /data/hdfs/namenode # 修正权限(若需要)
通过HDFS Shell命令获取集群整体状态,识别数据块副本、DataNode健康等问题:
hdfs dfsadmin -report,确认DataNode数量、存活状态及存储容量;hdfs fsck / -files -blocks -locations,检测损坏的数据块并修复(使用-delete选项删除损坏块,需谨慎操作)。hdfs dfsadmin -report # 查看集群状态
hdfs fsck / -files -blocks # 检查文件系统完整性
若集群处于安全模式(NameNode启动时的临时状态),无法执行写操作。使用以下命令退出安全模式:
hdfs dfsadmin -safemode leave
若无法退出,需等待DataNode上报足够的数据块(可通过hdfs dfsadmin -report查看“Live datanodes”数量)。
若上述步骤均无法解决问题,尝试重启HDFS服务以重置状态:
stop-dfs.sh # 停止HDFS
start-dfs.sh # 启动HDFS
重启前建议备份/data/hdfs/namenode目录(NameNode元数据),避免数据丢失。
fsimage和edits文件(位于dfs.namenode.name.dir目录);rm -rf /data/hdfs/namenode/* # 删除元数据目录(谨慎操作)
hdfs namenode -format # 重新格式化
start-dfs.sh # 重启HDFS