HDFS故障排查(Ubuntu环境)
在Ubuntu系统上排查HDFS故障需遵循“状态检查→日志分析→配置验证→节点修复”的系统化流程,以下是具体操作步骤:
首先确认HDFS核心组件(NameNode、DataNode)的运行状态。使用systemctl
命令查看服务是否处于active (running)
状态:
systemctl status hadoop-hdfs-namenode # 检查NameNode
systemctl status hadoop-hdfs-datanode # 检查DataNode
若服务未运行,使用start
命令启动对应服务:
systemctl start hadoop-hdfs-namenode
systemctl start hadoop-hdfs-datanode
也可通过jps
命令查看Java进程,确认NameNode(NameNode
)、DataNode(DataNode
)进程是否存在。
日志是故障定位的关键,HDFS日志默认位于$HADOOP_HOME/logs
目录(如/usr/local/hadoop/logs
)。重点查看以下日志:
hadoop-*-namenode-*.log
(记录NameNode启动、元数据操作等信息);hadoop-*-datanode-*.log
(记录DataNode数据块接收、心跳等信息)。tail -f
实时查看日志,或grep
过滤错误信息:tail -f /usr/local/hadoop/logs/hadoop-ubuntu-namenode-ubuntu.log # 替换为实际用户名和主机名
tail -f /usr/local/hadoop/logs/hadoop-ubuntu-datanode-ubuntu.log
常见错误类型:No space left on device
(磁盘满)、Permission denied
(权限问题)、Connection refused
(网络连接失败)。
使用hdfs dfsadmin -report
命令获取集群整体健康状况,重点检查:
active
(活跃)或standby
(备用);dfs.replication
(副本数,通常为3)匹配;Capacity
(总容量)、Used
(已用容量)、Remaining
(剩余容量)。Missing blocks
(缺失数据块)或Under replicated blocks
(副本不足),需进一步修复。HDFS的核心配置文件位于$HADOOP_HOME/etc/hadoop
目录,需验证以下关键配置项的正确性:
fs.defaultFS
(HDFS的URI,如hdfs://ubuntu:9000
)、hadoop.tmp.dir
(临时目录路径);dfs.namenode.name.dir
(NameNode元数据存储路径)、dfs.datanode.data.dir
(DataNode数据存储路径)、dfs.replication
(副本数)。HDFS依赖节点间的网络通信,需检查:
ping
命令测试NameNode与DataNode之间的网络连通性(如ping <DataNode_IP>
);netstat
或ss
命令检查HDFS所需端口(如NameNode的50070
、DataNode的50010
)是否被占用:sudo netstat -tuln | grep 50070 # 检查NameNode端口
sudo ss -tuln | grep 50010 # 检查DataNode端口
若端口被占用,可通过kill
命令终止占用进程,或修改hdfs-site.xml
中的端口配置。
df -h
命令查看各分区使用情况,若Used
占比超过80%,需清理旧数据(如hdfs dfs -rm -r /tmp/*
删除临时文件)或扩展存储;dfs.datanode.data.dir
配置的路径)具备正确的读写权限(通常为hadoop:hadoop
):sudo chown -R hadoop:hadoop /usr/local/hadoop/data # 替换为实际数据目录
sudo chmod -R 755 /usr/local/hadoop/data
若权限不足,DataNode无法写入数据,会导致Permission denied
错误。
若DataNode无法启动或与NameNode失去连接,需执行以下操作:
systemctl restart hadoop-hdfs-datanode
重启服务;hdfs dfsadmin -report
查看DataNode是否出现在节点列表中;Disk error
或Corrupt block
,可停止服务后删除数据目录(如/usr/local/hadoop/data
),再重启服务(HDFS会自动重新下载副本)。若NameNode无法启动,常见原因包括:
dfs.namenode.checkpoint.dir
);dfs.namenode.name.dir
)中的临时文件;hadoop-env.sh
中设置HADOOP_NAMENODE_OPTS
,如-Xmx40g
,根据文件数估算)。hdfs fsck
命令扫描整个集群,查看损坏的块:hdfs fsck / -files -blocks -locations # 检查根目录
Corrupt blocks
,可使用-delete
选项删除损坏文件(需确认文件可重建),或使用hdfs debug recoverLease
恢复租约(适用于写入过程中的故障):hdfs fsck /path/to/corrupt/file -delete # 删除损坏文件
hdfs debug recoverLease /path/to/file -retries 5 # 恢复租约
Under replicated blocks
,HDFS会自动复制副本(需确保dfs.replication
≥2),也可手动触发复制:hdfs dfs -setrep -w 3 /path/to/file # 将指定文件的副本数设置为3
```。
### **10. 预防性维护建议**
- **定期检查块状态**:编写脚本定期执行`hdfs fsck /`,监控`Missing blocks`和`Under replicated blocks`的数量;
- **清理无用文件**:定期删除`/tmp`目录下的临时文件,合并小文件(如通过Hive的`INSERT OVERWRITE`语句);
- **启用监控工具**:使用Prometheus+Grafana监控集群的`NameNode内存使用率`、`DataNode磁盘空间`、`Pending replication blocks`等指标,及时预警故障。