温馨提示×

如何解决Ubuntu Hadoop启动失败问题

小樊
35
2025-12-28 13:49:08
栏目: 智能运维

Ubuntu Hadoop 启动失败的排查与修复指南

一 快速自检清单

  • 检查 Java 与环境变量:执行 java -version;若未安装,执行 sudo apt update && sudo apt install openjdk-11-jdk(或 openjdk-8-jdk)。在 ~/.bashrc~/.zshrc 中设置并生效:
    • export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    • export HADOOP_HOME=/opt/hadoop
    • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    • 执行 source ~/.bashrc 后用 echo $JAVA_HOMEhadoop version 验证。
  • 核对关键配置文件(位于 $HADOOP_HOME/etc/hadoop):
    • core-site.xml:确认 fs.defaultFS 指向正确的 NameNode(如 hdfs://namenode-ip:9000)。
    • hdfs-site.xml:检查 dfs.namenode.name.dirdfs.datanode.data.dir 为绝对路径且目录存在、可写。
    • yarn-site.xml:设置 yarn.resourcemanager.hostname;将 yarn.nodemanager.aux-services 设为 mapreduce_shuffle
    • mapred-site.xml:设置 mapreduce.framework.name=yarn
  • 首次或元数据异常时格式化 HDFS:执行 hdfs namenode -format(注意:会清空 HDFS 数据,务必先备份)。
  • 检查进程与端口:用 jps 查看 NameNode/DataNode/ResourceManager/NodeManager;用 netstat -tulnp | grep 检查端口占用(如 9000/50010/8088 等)。
  • 查看日志定位问题:日志在 $HADOOP_HOME/logs,如 hadoop--namenode-.log,用 tail -f 实时跟踪。

二 常见故障与修复

  • Java 或环境变量错误:命令报 “Command not found” 或日志出现 ClassNotFoundException。确认 java -version 正常,路径 $JAVA_HOME 与实际安装一致(如 /usr/lib/jvm/java-11-openjdk-amd64),并重新 source ~/.bashrc
  • 配置错误导致启动失败或节点未注册:核对 core-site.xml/hdfs-site.xml/yarn-site.xml/mapred-site.xml 的必填项与语法(标签闭合、值用双引号)。修改后依次执行 stop-dfs.sh && stop-yarn.sh && start-dfs.sh && start-yarn.sh
  • 主机名解析与 SSH 免密:所有节点在 /etc/hosts 中配置 IP<->主机名 映射;主节点能 ssh user@slave_ip 免密登录。
  • 防火墙阻断通信:启用 ufw 放行端口,例如 sudo ufw allow 9000/tcp(NameNode RPC)、sudo ufw allow 50010/tcp(DataNode 数据传输)、sudo ufw allow 8088/tcp(ResourceManager Web)。
  • 端口冲突:用 netstat 找到占用进程并释放或调整 Hadoop 配置端口(如将 fs.defaultFS 的端口由 9000 改为 9001)。
  • NameNode 与 DataNode ClusterID/namespaceID 不一致:日志出现 “ClusterID mismatch”。清理 dfs.datanode.data.dir 数据后,重新 hdfs namenode -format 并启动。
  • root 启动被拒:Hadoop 3.x 要求以普通用户运行,或在 hadoop-env.sh 中显式设置:
    • export HDFS_NAMENODE_USER=hadoop
    • export HDFS_DATANODE_USER=hadoop
    • export HDFS_SECONDARYNAMENODE_USER=hadoop
  • 本地/ HDFS 目录权限:确保 dfs.name.dir/dfs.data.dir 与 HDFS 根目录对运行用户可写,例如 sudo chown -R ubuntu:ubuntu /home/ubuntu/hadoop/dfs
  • 配置文件语法错误:多余空格、标签未闭合、属性值未加引号等会导致启动失败,需逐文件校验 XML 结构与引号。

三 分布式部署关键检查

  • 在所有节点统一 /etc/hosts,避免依赖不可控 DNS;确保节点间 ping ssh 正常。
  • 主节点对从节点配置 SSH 免密登录(ssh-keygen 与 ssh-copy-id)。
  • 统一 Hadoop 版本与配置,特别是 core-site.xml/hdfs-site.xml/yarn-site.xml 中的地址与目录。
  • 开放集群通信端口(示例):9000(HDFS RPC)、50010(DataNode 数据传输)、8088(YARN Web)。
  • 启动顺序:先 start-dfs.shstart-yarn.sh;用 jpshdfs dfsadmin -report 校验 DataNode 是否注册。

四 版本差异与端口对照

  • Java 版本:Hadoop 2.x 常用 Java 8;Hadoop 3.x 建议使用 Java 8 或 11,以所用发行版说明为准。
  • 关键端口对照(示例):
    • HDFS RPC9000(2.x 常用,3.x 仍广泛使用;若冲突可改为 9001
    • NameNode Web UI50070(2.x),9870(3.x)
    • DataNode IPC/数据传输50010
    • ResourceManager Web UI8088
  • 若端口被占用或需规避冲突,优先在 core-site.xml 调整 fs.defaultFS 的端口,再重启服务。

五 最小化验证流程

  • 单节点伪分布式自检:
    1. 确认 java -versionecho $JAVA_HOME 正常;
    2. 校验 core-site.xml/ hdfs-site.xml/ yarn-site.xml/ mapred-site.xml 关键项;
    3. 首次启动前执行 hdfs namenode -format
    4. 启动:start-dfs.sh && start-yarn.sh
    5. 校验:jps 应看到 NameNode/DataNode/ResourceManager/NodeManager
    6. 访问 http://:9870(3.x)或 http://:50070(2.x)查看 HDFS;访问 http://:8088 查看 YARN;
    7. 若异常,立即查看 $HADOOP_HOME/logs 中对应进程的 .log 文件定位。

0