CentOS环境下Hadoop故障排查指南
日志是故障定位的核心依据。Hadoop的日志主要分布在$HADOOP_HOME/logs目录(如NameNode日志为hadoop-namenode-<hostname>.log、DataNode日志为hadoop-datanode-<hostname>.log),使用tail -f实时查看实时日志,或grep "ERROR"过滤错误信息;同时通过journalctl -xe查看系统级日志,定位内核或服务层面的异常。
配置错误是常见问题根源,需重点核查以下文件:
fs.defaultFS(NameNode地址,如hdfs://namenode:9000)、hadoop.tmp.dir(临时目录,需存在且可写)等参数;dfs.replication(副本数,需<=集群节点数)、dfs.datanode.data.dir(DataNode数据目录,需挂载且空间充足)、dfs.namenode.name.dir(NameNode元数据目录)等参数;yarn.resourcemanager.hostname(ResourceManager地址)、yarn.nodemanager.aux-services(NodeManager辅助服务,如mapreduce_shuffle)等参数。使用systemctl status hadoop-namenode、systemctl status hadoop-datanode、systemctl status hadoop-resourcemanager等命令检查关键服务是否处于active (running)状态;若服务未启动,通过journalctl -u hadoop-namenode查看服务日志定位具体原因。同时使用ps aux | grep hadoop查看Hadoop相关进程是否存在,若进程异常退出,需结合日志分析崩溃原因。
Hadoop集群依赖节点间通信,需完成以下检查:
/etc/hosts文件,确保包含所有节点的IP地址 主机名映射(如192.168.1.100 namenode、192.168.1.101 datanode1);ping <hostname>测试节点间网络是否可达,telnet <hostname> <port>(如telnet namenode 9000)验证端口是否开放;firewall-cmd --list-ports查看开放端口,通过firewall-cmd --add-port=9000/tcp --permanent开放Hadoop所需端口(如9000、50070、8088),并执行firewall-cmd --reload使配置生效。df -h查看各分区使用情况,确保/、/var/log、Hadoop数据目录(如dfs.datanode.data.dir指定路径)有足够空间(建议剩余空间>=20%);若空间不足,使用du -sh *定位大文件并清理;chown -R hadoop:hadoop /path/to/hadoop/dir将目录所有者设为hadoop用户(需提前创建),使用chmod -R 755 /path/to/hadoop/dir设置合理权限。使用Hadoop自带命令检查HDFS状态:
hdfs dfsadmin -safemode leave手动退出;hdfs fsck /检查文件系统健康状态,-delete参数可自动删除损坏的数据块(谨慎使用);http://namenode:50070(NameNode Web界面),查看DataNode是否全部存活(Live Nodes数量=集群DataNode数量)。Hadoop依赖Java环境,需确认:
java -version查看Java版本(建议使用Oracle JDK 8或OpenJDK 8),若未安装,通过yum install java-1.8.0-openjdk-devel安装;/etc/profile文件,添加export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk(路径以实际为准),执行source /etc/profile使配置生效;HADOOP_HOME(如/opt/hadoop)和PATH(包含$HADOOP_HOME/bin、$HADOOP_HOME/sbin)配置正确。dfs.name.dir目录是否存在(若不存在则创建),查看NameNode日志(hadoop-namenode-*.log)中的IOException(如磁盘空间不足、权限问题);dfs.datanode.data.dir目录可写,检查/etc/hosts中的主机名解析是否正确,查看DataNode日志中的Connection refused错误(多为网络或端口问题);http://resourcemanager:8088)查看ApplicationMaster日志,定位OutOfMemoryError(调整yarn.nodemanager.resource.memory-mb参数)或ClassNotFoundException(检查应用程序JAR包是否上传)。