温馨提示×

Hadoop在Ubuntu上的故障排查

小樊
80
2025-10-02 02:13:32
栏目: 智能运维

Hadoop在Ubuntu上的常见故障及排查步骤

1. Java环境配置问题

现象:运行hadoop version或Hadoop命令时提示“Command not found”;日志中出现Java相关错误(如ClassNotFoundException)。
排查与解决

  • 确认Java已安装: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_HOMEhadoop version验证。

2. Hadoop配置文件错误

现象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.nameyarn
  • 修改后生效:保存文件并重启Hadoop服务(stop-dfs.sh && stop-yarn.sh && start-dfs.sh && start-yarn.sh)。

3. 网络连接与主机名解析问题

现象:节点间无法通信(ping <node-ip>失败);hdfs dfsadmin -report显示“Connection refused”;YARN节点未注册。
排查与解决

  • 基础网络测试:使用ping <node-ip>测试所有节点间的连通性,若失败需检查网络配置(IP、子网掩码、网关、DNS)。
  • hosts文件配置:编辑/etc/hosts,添加所有节点的IP与主机名映射(如192.168.1.10 namenode192.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免密登录:确保主节点能免密登录所有从节点(使用ssh-keygen -t rsa生成密钥,ssh-copy-id <node-username>@<node-ip>分发公钥)。

4. HDFS元数据不一致或DataNode无法启动

现象hdfs namenode -format后仍无法启动;hdfs dfsadmin -report显示DataNode空间为0B;日志中出现“ClusterID mismatch”或“Incompatible namespaceID”。
排查与解决

  • ClusterID冲突:若日志提示“ClusterID mismatch”(如NameNode与DataNode的ClusterID不一致),需删除DataNode的dfs/data目录(如rm -rf /home/ubuntu/hadoop/dfs/data),然后重新格式化NameNode(hdfs namenode -format)并启动服务。
  • 权限问题:确保HDFS数据目录(dfs.name.dirdfs.data.dir)属于Hadoop运行用户(如ubuntu),并具有读写权限(sudo chown -R ubuntu:ubuntu /home/ubuntu/hadoop/dfs)。
  • 格式化注意事项:首次启动Hadoop或元数据损坏时才需格式化,格式化会清除所有HDFS数据,需提前备份。

5. 服务启动失败或进程未运行

现象start-dfs.sh/start-yarn.sh无报错但jps看不到对应进程(如NameNode、DataNode、ResourceManager);服务启动后立即退出。
排查与解决

  • 查看日志文件:Hadoop日志位于$HADOOP_HOME/logs目录下,通过tail -f hadoop-<username>-namenode-<hostname>.log实时查看NameNode日志,定位具体错误(如端口被占用、权限不足、配置错误)。
  • 端口冲突:使用netstat -tulnp | grep <port>检查Hadoop所需端口是否被其他进程占用(如9000端口被占用时,可修改core-site.xml中的fs.defaultFS端口为其他值,如9001)。
  • 以普通用户运行:避免使用root用户启动Hadoop(Hadoop 3.x版本会提示“ERROR: Attempting to operate on hdfs namenode as root”),建议使用安装Hadoop的普通用户(如ubuntu)。

6. 权限与目录问题

现象hdfs dfs -mkdir /test提示“No such file or directory”;DataNode无法写入数据;NameNode无法启动。
排查与解决

  • HDFS目录权限:确保HDFS根目录(如/)存在且有写入权限,可通过hdfs dfs -mkdir -p /test创建目录并设置权限(hdfs dfs -chmod 777 /test)。
  • 本地目录权限:Hadoop数据目录(dfs.name.dirdfs.data.dir)必须属于Hadoop运行用户(如ubuntu),并具有读写权限(sudo chown -R ubuntu:ubuntu /home/ubuntu/hadoop/dfs)。
  • 命令版本适配:Hadoop 3.x及以上版本使用hdfs dfs替代旧版的hadoop dfs(如hdfs dfs -ls /代替hadoop dfs -ls /)。

7. 日志分析与高级排查

现象:故障现象不明确,无法通过上述步骤定位问题。
排查与解决

  • 收集日志:重点查看$HADOOP_HOME/logs目录下的namenode.logdatanode.logresourcemanager.lognodemanager.log,使用grep "ERROR"过滤错误信息。
  • 使用监控工具:通过Hadoop Web界面(NameNode:http://namenode-ip:9870、ResourceManager:http://resourcemanager-ip:8088)查看集群状态、节点健康度、任务执行情况。
  • 系统资源监控:使用top(CPU)、free -h(内存)、df -h(磁盘空间)检查系统资源是否充足(如DataNode磁盘空间不足会导致数据写入失败)。

0