HDFS故障排查需围绕组件状态、配置正确性、网络连通性、数据完整性等核心维度展开,以下是系统化的排查步骤及方法:
日志是排查HDFS故障的关键依据,NameNode、DataNode、Secondary NameNode等组件的日志会记录详细的错误信息(如内存溢出、磁盘故障、网络超时)。
$HADOOP_HOME/logs目录(如/var/log/hadoop-hdfs/),具体文件包括:
hadoop-*-namenode-*.loghadoop-*-datanode-*.loghadoop-*-secondarynamenode-*.logtail -f命令实时查看日志(如tail -f /var/log/hadoop-hdfs/namenode.log),或通过grep过滤关键错误(如grep "ERROR" namenode.log)。通过命令查看NameNode、DataNode等服务是否正常运行,若服务未启动则需手动启动:
systemctl status hadoop-hdfs-namenode # 检查NameNode状态
systemctl status hadoop-hdfs-datanode # 检查DataNode状态
systemctl start命令启动(如systemctl start hadoop-hdfs-namenode)。HDFS的核心配置文件(core-site.xml、hdfs-site.xml)需确保参数设置正确,常见需检查的参数:
core-site.xml:fs.defaultFS(NameNode RPC地址,如hdfs://namenode:8020);hdfs-site.xml:dfs.replication(副本因子,默认3)、dfs.namenode.datanode.registration.ip-hostname-check(是否允许IP注册,建议设为false)。vi)检查配置文件,确保参数值符合集群环境。HDFS依赖节点间的网络通信(如NameNode与DataNode的心跳、客户端与集群的连接),需检查:
ping命令测试(如ping datanode1);netstat -tulnp或ss -tulnp命令检查NameNode(默认8020)、DataNode(默认50010)等端口是否处于监听状态;firewall-cmd --add-port=8020/tcp --permanent)。df -h命令检查DataNode磁盘使用情况,若磁盘空间不足(如超过90%),需清理无用文件或扩容磁盘;ls -l命令检查HDFS目录权限(如/user/hive/warehouse),确保用户有读写权限(可通过hdfs dfs -chmod -R 777 /path临时授权,生产环境建议精细化设置)。HDFS提供丰富的命令行工具,用于检查集群状态、文件系统完整性等:
hdfs dfsadmin -report(显示DataNode数量、存储容量、心跳状态等);hdfs fsck /path -files -blocks -locations(扫描指定路径下的文件块,列出损坏块及位置,修复命令:hdfs fsck /path -delete删除损坏块);hdfs dfsadmin -safemode leave退出(需谨慎操作,确保集群正常)。通过监控工具实时查看集群指标,提前预警潜在问题:
http://namenode:50070),可查看集群拓扑、DataNode状态、块分布等;hadoop-env.sh中的HADOOP_HEAPSIZE参数(如export HADOOP_HEAPSIZE=4096,增大堆内存),或优化数据存储策略(如合并小文件、增大dfs.blocksize);hadoop-daemon.sh stop datanode → hadoop-daemon.sh start datanode);dfs.replication需小于等于DataNode数量),或修复网络连接问题。