Hadoop在Ubuntu上的常见故障及排查步骤
现象:运行hadoop version或Hadoop命令时提示“Command not found”;日志中出现Java相关错误(如ClassNotFoundException)。
排查与解决:
java -version(Ubuntu默认可能未安装OpenJDK,需运行sudo apt update && sudo apt install openjdk-11-jdk)。~/.bashrc(或~/.zshrc),添加以下内容:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 根据实际Java安装路径调整
export HADOOP_HOME=/path/to/hadoop # 替换为Hadoop安装目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc,再次运行echo $JAVA_HOME和hadoop version验证。现象:start-dfs.sh/start-yarn.sh启动失败;hdfs dfsadmin -report显示节点未连接;YARN任务无法提交。
排查与解决:
core-site.xml:确认fs.defaultFS指向正确的NameNode地址(如hdfs://namenode-ip:9000,Ubuntu 3.x版本可能改为hdfs://namenode-hostname:9000)。hdfs-site.xml:检查dfs.namenode.name.dir(NameNode元数据目录)和dfs.datanode.data.dir(DataNode数据目录)路径是否存在且可写(建议使用绝对路径,如/home/ubuntu/hadoop/dfs/name)。yarn-site.xml:确保yarn.resourcemanager.hostname设置为ResourceManager节点的IP/主机名,yarn.nodemanager.aux-services包含mapreduce_shuffle。mapred-site.xml:设置mapreduce.framework.name为yarn。stop-dfs.sh && stop-yarn.sh && start-dfs.sh && start-yarn.sh)。现象:节点间无法通信(ping <node-ip>失败);hdfs dfsadmin -report显示“Connection refused”;YARN节点未注册。
排查与解决:
ping <node-ip>测试所有节点间的连通性,若失败需检查网络配置(IP、子网掩码、网关、DNS)。/etc/hosts,添加所有节点的IP与主机名映射(如192.168.1.10 namenode、192.168.1.11 datanode1),避免依赖DNS解析。ufw开放Hadoop所需端口(如sudo ufw allow 9000/tcp(NameNode)、sudo ufw allow 50010/tcp(DataNode数据传输)、sudo ufw allow 8088/tcp(ResourceManager Web界面))。ssh-keygen -t rsa生成密钥,ssh-copy-id <node-username>@<node-ip>分发公钥)。现象:hdfs namenode -format后仍无法启动;hdfs dfsadmin -report显示DataNode空间为0B;日志中出现“ClusterID mismatch”或“Incompatible namespaceID”。
排查与解决:
dfs/data目录(如rm -rf /home/ubuntu/hadoop/dfs/data),然后重新格式化NameNode(hdfs namenode -format)并启动服务。dfs.name.dir、dfs.data.dir)属于Hadoop运行用户(如ubuntu),并具有读写权限(sudo chown -R ubuntu:ubuntu /home/ubuntu/hadoop/dfs)。现象:start-dfs.sh/start-yarn.sh无报错但jps看不到对应进程(如NameNode、DataNode、ResourceManager);服务启动后立即退出。
排查与解决:
$HADOOP_HOME/logs目录下,通过tail -f hadoop-<username>-namenode-<hostname>.log实时查看NameNode日志,定位具体错误(如端口被占用、权限不足、配置错误)。netstat -tulnp | grep <port>检查Hadoop所需端口是否被其他进程占用(如9000端口被占用时,可修改core-site.xml中的fs.defaultFS端口为其他值,如9001)。ubuntu)。现象:hdfs dfs -mkdir /test提示“No such file or directory”;DataNode无法写入数据;NameNode无法启动。
排查与解决:
/)存在且有写入权限,可通过hdfs dfs -mkdir -p /test创建目录并设置权限(hdfs dfs -chmod 777 /test)。dfs.name.dir、dfs.data.dir)必须属于Hadoop运行用户(如ubuntu),并具有读写权限(sudo chown -R ubuntu:ubuntu /home/ubuntu/hadoop/dfs)。hdfs dfs替代旧版的hadoop dfs(如hdfs dfs -ls /代替hadoop dfs -ls /)。现象:故障现象不明确,无法通过上述步骤定位问题。
排查与解决:
$HADOOP_HOME/logs目录下的namenode.log、datanode.log、resourcemanager.log、nodemanager.log,使用grep "ERROR"过滤错误信息。http://namenode-ip:9870、ResourceManager:http://resourcemanager-ip:8088)查看集群状态、节点健康度、任务执行情况。top(CPU)、free -h(内存)、df -h(磁盘空间)检查系统资源是否充足(如DataNode磁盘空间不足会导致数据写入失败)。