日志是排查HDFS配置故障的核心依据,NameNode、DataNode等组件的日志会记录详细的错误信息(如权限不足、端口冲突、目录权限问题)。
$HADOOP_HOME/logs目录(如/var/log/hadoop-hdfs/),文件命名规则为hadoop-<username>-namenode-<hostname>.log(NameNode)、hadoop-<username>-datanode-<hostname>.log(DataNode)。tail -f实时查看日志(如tail -f /var/log/hadoop-hdfs/namenode-localhost.log),或用grep过滤关键错误(如grep "ERROR" /var/log/hadoop-hdfs/*.log)。Hadoop提供的命令行工具可直接检查集群状态、文件系统完整性及配置有效性:
hdfs dfsadmin -report可查看NameNode/Datanode数量、健康状况、存储容量、副本因子等关键信息,确认集群是否正常运行。hdfs fsck /可扫描整个文件系统,报告损坏的块、丢失的副本;hdfs fsck / -files -blocks -locations可查看详细块分布;hdfs fsck / -list-corruptfileblocks可列出所有损坏的文件块。hdfs dfsadmin -safemode leave退出。HDFS的核心配置文件(core-site.xml、hdfs-site.xml)参数错误是常见故障原因,需重点检查以下参数:
core-site.xml:fs.defaultFS(NameNode地址,如hdfs://namenode-host:9000)、hadoop.tmp.dir(临时目录,需确保有写权限)。hdfs-site.xml:dfs.replication(副本因子,单机模式设为1,集群模式设为3)、dfs.namenode.name.dir(NameNode元数据目录)、dfs.datanode.data.dir(DataNode数据目录)、dfs.namenode.handler.count(NameNode处理线程数,根据集群规模调整)。网络问题是导致DataNode无法连接NameNode的常见原因,需排查以下内容:
/etc/hosts文件中必须包含集群所有节点的IP地址-主机名映射(如192.168.1.100 namenode),避免DNS解析失败。ping <datanode-hostname>测试节点间连通性;使用netstat -tuln | grep <port>(如9000、50070)检查NameNode/DataNode端口是否正常监听。systemctl stop firewalld或firewall-cmd --add-port=9000/tcp --permanent)。df -h检查DataNode存储目录的磁盘使用情况,确保剩余空间充足(建议保留20%以上)。若空间不足,清理无用文件(如/tmp目录)或扩展磁盘。dfs.name.dir、dfs.data.dir)必须由hdfs用户拥有写权限(如chown -R hdfs:hdfs /path/to/hdfs/dir)。若权限不足,会导致DataNode无法启动或写入数据失败。Hadoop依赖Java环境,需确保以下配置正确:
java -version验证。$HADOOP_HOME/etc/hadoop/hadoop-env.sh中配置export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64(路径根据实际Java安装位置调整),并确保source hadoop-env.sh生效。jps命令查看NameNode、DataNode进程是否运行(如NameNode、DataNode)。若进程未启动,需检查日志定位原因(如端口冲突、配置错误)。http://namenode-host:9870),查看集群状态、DataNode列表、块分布等信息;DataNode Web界面(默认http://datanode-host:9864)可查看本地存储状态。/var/log/hadoop-hdfs/datanode-localhost.log),常见原因包括namespaceID不一致(需删除DataNode数据目录并重新格式化NameNode)、端口被占用(修改hdfs-site.xml中的dfs.datanode.address参数)。hdfs dfsadmin -safemode leave退出,若无法退出,需检查磁盘空间或修复损坏的块。dfs.replication设置过高(如集群节点少但副本数为3),会导致DataNode存储压力大。调整hdfs-site.xml中的dfs.replication参数(如设为2),并执行hdfs dfsadmin -setReplication <path> <replication>更新现有文件的副本数。