HDFS在Ubuntu上的故障排查指南
使用systemctl
命令查看HDFS核心服务(NameNode、DataNode)的运行状态,确认服务是否正常启动:
systemctl status hadoop-hdfs-namenode # 检查NameNode状态
systemctl status hadoop-hdfs-datanode # 检查DataNode状态
若服务未运行,使用systemctl start
命令启动对应服务;若启动失败,需进一步查看日志定位原因。
日志是故障排查的核心依据,HDFS的日志默认存储在/var/log/hadoop-hdfs/
目录下:
hadoop-<username>-namenode-<hostname>.log
hadoop-<username>-datanode-<hostname>.log
tail -f
命令实时查看日志,重点关注ERROR
或WARN
级别的信息(如元数据损坏、端口冲突、权限问题):tail -f /var/log/hadoop-hdfs/hadoop-ubuntu-namenode-localhost.log
检查$HADOOP_HOME/etc/hadoop
目录下的核心配置文件,确保关键参数设置正确:
fs.defaultFS
(NameNode RPC地址,如hdfs://localhost:9000
)配置正确;dfs.namenode.name.dir
(NameNode元数据存储路径)、dfs.datanode.data.dir
(DataNode数据存储路径)、dfs.replication
(副本数,默认3,单节点可设为1)等参数无误。source ~/.bashrc
使环境变量生效。使用jps
命令查看Hadoop相关进程是否正常运行(正常应包含NameNode
、DataNode
、SecondaryNameNode
等):
jps
若进程缺失,需重启对应服务(start-dfs.sh
),并通过日志分析进程终止原因(如端口被占用、权限不足)。
HDFS集群节点间需通过网络通信,使用ping
命令测试节点间的网络连通性(如DataNode与NameNode之间的通信):
ping <DataNode_IP>
使用netstat
或ss
命令检查HDFS所需端口(如NameNode的9000端口、DataNode的50010端口)是否被监听:
sudo netstat -tuln | grep 9000 # 检查NameNode端口
sudo ss -tuln | grep 50010 # 检查DataNode数据传输端口
若端口未监听,需检查防火墙设置(如ufw
)是否允许该端口:
sudo ufw allow 9000/tcp
df -h
命令检查HDFS数据目录所在磁盘的剩余空间(建议保留至少20%的空闲空间),若空间不足,清理无用文件(如/tmp
目录);hdfs
用户),避免因权限不足导致进程无法访问:sudo chown -R hdfs:hdfs /usr/local/hadoop/hdfs/namenode # 修改NameNode目录权限
sudo chown -R hdfs:hdfs /usr/local/hadoop/hdfs/datanode # 修改DataNode目录权限
NameNode
日志,定位具体错误(如java.io.IOException: NameNode metadata corrupted
);SecondaryNameNode
恢复元数据(需提前配置SecondaryNameNode
);dfs.namenode.name.dir
)并重新格式化:rm -rf /usr/local/hadoop/hdfs/namenode/* # 删除元数据
hdfs namenode -format # 重新格式化
Safe mode is ON
;hdfs dfsadmin
命令退出安全模式:hdfs dfsadmin -safemode leave
jps
无DataNode
进程,日志提示java.io.IOException: Cannot lock storage
(磁盘故障)或Connection refused
(与NameNode通信失败);dfs.datanode.data.dir
)是否存在(如磁盘损坏需更换磁盘);ping
NameNode),确保DataNode能访问NameNode的RPC端口;systemctl start hadoop-hdfs-datanode
。hdfs dfsadmin -report
显示副本数低于配置值(如dfs.replication=3
但实际为1);hdfs dfs -setrep
命令手动调整:hdfs dfs -setrep 3 /path/to/file # 将指定文件的副本数设置为3
hdfs dfsadmin -report
命令查看集群的整体状态(包括NameNode信息、DataNode数量、存储容量、数据块副本数等);hdfs fsck
命令检查HDFS文件系统的健康状况(如数据块丢失、损坏),并可修复部分问题:hdfs fsck / -files -blocks -locations # 检查根目录下的所有文件和数据块
hdfs debug recoverLease /path/to/corrupt/file -retries 3 # 修复损坏的数据块