CentOS Hadoop故障排查指南
日志是故障排查的核心依据,Hadoop的日志文件默认存放在$HADOOP_HOME/logs目录下(如hadoop-namenode-<hostname>.log、hadoop-datanode-<hostname>.log)。使用以下命令实时查看或筛选错误信息:
tail -f $HADOOP_HOME/logs/*.log:实时跟踪所有日志文件的最新内容;grep -i "error\|fail" $HADOOP_HOME/logs/*.log:筛选包含“error”或“fail”的错误日志,快速定位问题关键词。通过systemctl命令检查Hadoop关键服务(NameNode、DataNode、ResourceManager、NodeManager)的运行状态:
systemctl status hadoop-namenode
systemctl status hadoop-datanode
systemctl status hadoop-resourcemanager
systemctl status hadoop-nodemanager
若服务未启动,使用systemctl start <service-name>启动对应服务;若启动失败,需结合日志分析具体原因(如端口冲突、配置错误)。
Hadoop的配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml)是集群运行的基础,需重点检查以下内容:
dfs.namenode.name.dir、dfs.datanode.data.dir等路径需使用完全路径(如file:/usr/hadoop/name),避免相对路径或格式错误(如缺少file:前缀);fs.defaultFS(NameNode地址,如hdfs://namenode:9000)、dfs.replication(副本数,默认3,集群节点少时可调整为2)、yarn.resourcemanager.hostname(ResourceManager地址);scp命令复制配置文件到其他节点)。Hadoop集群依赖节点间的网络通信,需检查以下内容:
ping <node-ip>命令测试所有节点之间的网络连通性;/etc/hosts文件,添加节点IP与主机名的映射(如192.168.1.100 hadoop-namenode),避免DNS解析问题;firewalld,需关闭或放行Hadoop端口(如NameNode的9000端口、DataNode的50010端口):systemctl stop firewalld
systemctl disable firewalld
或使用iptables放行端口:iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
service iptables save
Hadoop进程需以指定用户(通常为hadoop)运行,避免权限问题:
chown -R hadoop:hadoop /usr/hadoop将Hadoop安装目录及数据目录的所有权赋予hadoop用户;chmod +x $HADOOP_HOME/sbin/*.sh赋予启动脚本执行权限;hadoop用户(su - hadoop),避免root用户运行导致的权限冲突。资源不足会导致Hadoop服务异常,需检查以下内容:
df -h命令检查磁盘使用率,确保/根目录及Hadoop数据目录(如/usr/hadoop/data)有足够空间(建议剩余空间大于20%);free -m查看内存使用情况,top查看CPU占用率,若资源不足,需增加物理内存、扩展磁盘或优化Hadoop配置(如调整yarn.nodemanager.resource.memory-mb参数)。Hadoop依赖Java环境,需确保以下配置正确:
java -version命令检查Java版本(推荐JDK 8或11),确保已安装OpenJDK或Oracle JDK;/etc/profile文件,添加以下内容:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # 替换为实际Java路径
export HADOOP_HOME=/usr/hadoop # 替换为实际Hadoop路径
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行source /etc/profile使配置生效;JAVA_HOME not set错误,需在$HADOOP_HOME/etc/hadoop/hadoop-env.sh中添加export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk。hdfs dfsadmin -safemode leave命令手动退出;hadoop fsck /命令检查HDFS文件系统健康状态,修复损坏的数据块(添加-delete参数可删除坏块);Incorrect RPC port错误,检查core-site.xml中的hadoop.rpc.socket.factory.class.default参数(默认org.apache.hadoop.net.StandardSocketFactory),确保端口配置正确;hadoop fs -put命令时报replicated to 0 nodes错误,需先启动DataNode(start-dfs.sh),确保DataNode进程运行。使用jps命令查看Hadoop相关进程是否启动(正常应包含NameNode、DataNode、ResourceManager、NodeManager):
jps
若进程未启动,需检查对应服务的日志(如hadoop-namenode-<hostname>.log),定位启动失败原因(如端口冲突、配置错误)。
确保Hadoop版本与操作系统(CentOS 7/8)、Java版本(JDK 8/11)及其他依赖组件(如Hive、Spark)兼容。参考Hadoop官方文档的“Compatibility Matrix”,避免因版本不匹配导致的故障。