温馨提示×

Hadoop在Ubuntu上的故障排除有哪些方法

小樊
37
2025-12-10 21:33:21
栏目: 智能运维

Hadoop 在 Ubuntu 上的故障排除方法

一 快速定位与通用检查

  • 核对基础环境:执行 java -version 确认已安装 Java 8(或集群要求的版本);检查 JAVA_HOME、HADOOP_HOME、PATH 是否导出并在当前会话生效(如 source ~/.bashrc)。
  • 查看进程与端口:用 jps 检查 NameNode、DataNode、ResourceManager、NodeManager 是否到位;必要时用 ss -lntp | grep <端口>lsof -i:<端口> 验证监听。
  • 翻阅日志:第一时间查看 $HADOOP_HOME/logs/ 下对应进程的 .log.out,从异常栈定位配置、权限或网络问题。
  • 配置校验:重点核对 core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xmlfs.defaultFS、dfs.replication、yarn.resourcemanager.hostname 等关键项。
  • 防火墙与网络:在 Ubuntu 上放行端口(如 9870/8088/9000/50010/50020/50075/50090),或临时关闭 ufw 验证是否为网络阻断。
  • 首次部署或状态异常:执行 hdfs namenode -format 重建元数据(注意会清空 HDFS 数据)。

二 常见故障与修复对照表

症状 高频原因 快速修复
启动报 JAVA_HOME is not set 未设置或设置路径错误 hadoop-env.sh 中显式导出 JAVA_HOME,如:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
root 启动报缺少 *_USER 变量 Hadoop 3.x 的安全启动限制 sbin/start-dfs.sh / stop-dfs.sh 顶部加入:HDFS_DATANODE_USER=root;HDFS_DATANODE_SECURE_USER=hdfs;HDFS_NAMENODE_USER=root;HDFS_SECONDARYNAMENODE_USER=root
执行脚本报 pdsh@xxx: localhost: Connection refused pdsh 默认用 rsh /etc/profile 加入:export PDSH_RCMD_TYPE=ssh 并 source 使其生效
浏览器访问 50070 失败 Hadoop 3.x 端口变更 改用 9870(如 http://localhost:9870)
DataNode 启动失败或反复退出 切换伪分布式/分布式后 tmp/dfs/name/data 不一致 清理所有节点的临时目录,重新 hdfs namenode -format 后再启动
HDFS 命令报 No such file or directory 用户 HDFS 家目录 不存在 先执行:hdfs dfs -mkdir -p /user/$USER
命令未找到或 PATH 无效 仅当前终端导出 PATH ~/.bashrc 中追加 PATH 并 source,确保全局可用
主机名解析错误(如 “Does not contain a valid host:port authority”) /etc/hosts 或主机名含非法字符(如 _. 使用仅含字母数字与连字符的主机名,并在 /etc/hosts 正确映射
端口不通或 Live datanodes 为 0 防火墙阻断或节点间不通 放行相关端口(如 9870/8088/9000/50010/50020/50075/50090),或临时关闭 ufw 验证
出现 NativeCodeLoader 警告 缺少本地库或库路径未设置 hadoop-env.sh 添加:export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native;export HADOOP_OPTS=“-Djava.library.path=$HADOOP_PREFIX/lib”

三 配置与版本差异要点

  • Hadoop 3.x 与 2.x 的 Web UI 端口不同:NameNode 由 50070 改为 9870;YARN 的 8088 保持不变。
  • 启动脚本的用户变量名在 3.x 有调整:将已废弃的 HADOOP_SECURE_DN_USER 替换为 HDFS_DATANODE_SECURE_USER
  • 命令语法更新:Hadoop 3.x 推荐使用 hdfs dfs -mkdir -p … 替代老版本命令格式。
  • 主机名规范:避免使用 下划线“_”点号“.”,防止 RPC/地址解析异常。
  • 环境变量优先级:脚本内显式导出 JAVA_HOME/HADOOP_HOME 可避免系统级配置遗漏。

四 实用排障脚本与命令清单

  • 一键健康检查脚本(示例)
#!/usr/bin/env bash
echo "=== Java & Hadoop ==="
java -version 2>&1
hadoop version 2>&1

echo "=== Env ==="
echo "JAVA_HOME=$JAVA_HOME"
echo "HADOOP_HOME=$HADOOP_HOME"
echo "PATH=$PATH"

echo "=== Processes ==="
jps

echo "=== NameNode HTTP ==="
ss -lntp | grep 9870 || echo "9870 not listening"

echo "=== DFS Health ==="
hdfs dfsadmin -report | head -20

echo "=== Recent logs (NameNode) ==="
tail -n50 $HADOOP_HOME/logs/hadoop-*-namenode-*.log | grep -i -E 'error|exception|failed'
  • 常用命令速查
    • 启动/停止:start-dfs.sh / stop-dfs.shstart-yarn.sh / stop-yarn.sh
    • 进程查看:jps
    • 端口检查:ss -lntp | grep <端口>lsof -i:<端口>
    • 元数据初始化:hdfs namenode -format(仅在首次或数据可丢弃时执行)
    • 创建用户目录:hdfs dfs -mkdir -p /user/$USER
    • 防火墙放行(Ubuntu):sudo ufw allow 9870,8088,9000,50010,50020,50075,50090/tcpsudo ufw disable(仅测试环境)

0