Ubuntu环境下Hadoop集群故障排查方法
使用jps命令查看Hadoop相关进程(NameNode、DataNode、ResourceManager、NodeManager等)是否正常运行。若进程缺失,需结合日志进一步分析缺失原因(如配置错误、端口占用等)。例如,若NameNode进程未启动,可能是dfs.namenode.name.dir配置的目录不存在或权限不足。
Hadoop的日志文件位于$HADOOP_HOME/logs目录下(如hadoop-<username>-namenode-<hostname>.log、hadoop-<username>-datanode-<hostname>.log),是故障排查的核心依据。通过tail -f命令实时查看日志,或使用grep过滤错误关键词(如“ERROR”“Exception”),可快速定位问题根源(如端口冲突、磁盘空间不足、权限问题)。
检查Hadoop核心配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml)的配置项是否正确:
core-site.xml:fs.defaultFS应指向NameNode的正确地址(如hdfs://namenode-ip:9000);hdfs-site.xml:dfs.replication(副本数)需与集群节点数量匹配(如3节点集群设置为3);yarn-site.xml:yarn.resourcemanager.hostname应指向ResourceManager节点的IP或主机名。
配置错误会导致节点间通信失败或服务无法启动。Hadoop集群依赖节点间的网络通信,需通过以下命令排查网络问题:
ping <datanode-ip>检查节点间是否可达;ssh-keygen -t rsa生成密钥,ssh-copy-id <username>@<datanode-ip>复制密钥);/etc/hosts文件,添加节点IP与主机名的映射(如192.168.1.10 namenode),避免DNS解析失败;sudo ufw status查看防火墙状态,开放Hadoop所需端口(如NameNode的9000端口、DataNode的50010端口、ResourceManager的8032端口)。使用hdfs dfsadmin -report命令查看HDFS集群状态,包括:
dfs.datanode.du.reserved配置的保留空间需合理);dfs.replication的值应符合配置,若副本数为0,需检查DataNode是否正常启动或网络是否可达。
若Live Nodes为0,可能是DataNode进程未启动或无法连接NameNode。使用yarn node -list命令查看ResourceManager管理的NodeManager列表,确认NodeManager是否正常注册。若NodeManager未注册,需检查:
yarn-site.xml中yarn.resourcemanager.hostname配置是否正确;hadoop-<username>-nodemanager-<hostname>.log)是否有错误信息(如端口冲突、资源不足)。使用top、htop、free -h、df -h等命令监控系统资源:
yarn.scheduler.maximum-allocation-mb参数);yarn.nodemanager.resource.memory-mb(NodeManager可用内存)或mapreduce.map.memory.mb(Map任务内存);/tmp目录(Hadoop临时文件)或扩展DataNode存储容量。Hadoop对文件和目录的权限要求严格,需检查:
$HADOOP_HOME、$HADOOP_HOME/logs、$HADOOP_HOME/tmp应属于hadoop用户(如chown -R hadoop:hadoop $HADOOP_HOME);dfs.data.dir配置的目录(如/data/hadoop/data)需存在且权限正确(chmod -R 755 /data/hadoop/data);/tmp目录下的Hadoop临时文件(如/tmp/hadoop-<username>)需清理,避免进程冲突。netstat -tulnp | grep <port>查找占用进程,杀掉或修改Hadoop配置中的端口号);dfs.namenode.name.dir目录是否存在(若不存在则创建),或是否处于不一致状态(使用hdfs namenode -recover恢复);dfs.datanode.address配置(默认50010端口)是否正确,或防火墙是否阻止了该端口。