温馨提示×

Ubuntu HDFS常见问题及解决方法

小樊
44
2025-12-22 18:04:40
栏目: 智能运维

Ubuntu 上部署与运行 HDFS 的常见问题及对应解决方案

一 启动与权限类问题

  • root 启动报错:出现如 “ERROR: Attempting to operate on hdfs namenode as root … but there is no HDFS_NAMENODE_USER defined”。在 Hadoop 3.x 需要在脚本中显式声明运行用户,或配置环境变量。做法一:在 $HADOOP_HOME/sbin/start-dfs.shstop-dfs.sh 顶部加入(版本差异请见下条):
    HDFS_DATANODE_USER=root
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    # 如脚本或版本提示 HADOOP_SECURE_DN_USER 已废弃,改用:
    HDFS_DATANODE_SECURE_USER=hdfs
    
    同时在 start-yarn.sh/stop-yarn.sh 顶部加入:
    YARN_RESOURCEMANAGER_USER=root
    YARN_NODEMANAGER_USER=root
    HDFS_DATANODE_SECURE_USER=yarn
    
    做法二:在 /etc/profile.d/hadoop-env.sh/etc/profile 中导出变量(对所有节点分发并 source 使其生效)。注意不同版本对变量名有差异,若日志提示 HADOOP_SECURE_DN_USER 已被替换为 HDFS_DATANODE_SECURE_USER,请使用新变量名。
  • 使用 pdsh 报错 “Connection refused”:pdsh 默认走 rsh,请改为 ssh。在 /etc/profile 加入 export PDSH_RCMD_TYPE=sshsource /etc/profile,或改用 ssh 方式启动脚本。

二 访问与端口类问题

  • Web UI 打不开:Hadoop 3.xNameNode Web UI 端口为 9870(不是 2.x 的 50070),访问 http://:9870
  • 本机访问虚拟机 HDFS 失败(Connection refused):
    • 在虚拟机内确认监听:netstat -tlpn | grep 9000,应看到 0.0.0.0:9000 而非仅 127.0.0.1:9000
    • 在虚拟机与本机分别测试连通:telnet <namenode-ip> 9000
    • 配置主机名解析:虚拟机 /etc/hosts 需有 <ip> <hostname>,且不要写 127.0.0.1 <hostname>;本机(Windows)在 C:\Windows\System32\drivers\etc\hosts 增加同样映射。
    • 确认 core-site.xmlfs.defaultFShdfs://<hostname>:9000,与上面 hosts 一致。
  • 防火墙/安全组:确保 9000/9870 等端口对客户端开放(云环境需配置安全组规则)。

三 配置与命令差异

  • JAVA_HOME 未设置:执行 Hadoop 命令报 “Error: JAVA_HOME is not set …”。在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 明确设置,例如:
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    
  • 命令语法变更:Hadoop 3.x 使用 hdfs dfs 子命令,而非已废弃的 hadoop dfs。例如创建目录:
    hdfs dfs -mkdir -p /user/hadoop/input
    
  • 环境变量弃用提示:执行命令出现 “Warning: $HADOOP_HOME is deprecated.”。可在 /etc/profile 加入 export HADOOP_HOME_WARN_SUPPRESS=1 抑制该告警(不推荐长期忽略,建议迁移到新变量与配置方式)。

四 节点与权限异常

  • DataNode 未启动或反复退出:常见原因为多次格式化导致 clusterID 不一致。处理步骤:
    • 停止集群,备份并清理 dfs.namenode.name.dirdfs.datanode.data.dir 下的数据目录(或仅删除 VERSION 文件中的 clusterID 使其与 NameNode 一致,操作需谨慎)。
    • 仅在 NameNode 上执行一次格式化:hdfs namenode -format,然后启动集群。
  • 本机提交作业报 Permission denied:如 “user=new, access=WRITE …”。可选方案:
    • 临时关闭权限校验:在 hdfs-site.xml 设置 dfs.permissions.enabledfalse(仅测试环境)。
    • 为目标目录赋权:hdfs dfs -chmod -R 755 /user/hadoop(或更宽松的 777,谨慎使用)。
    • 在客户端设置运行用户:在环境变量或代码中设置 HADOOP_USER_NAME=hadoop(对应 HDFS 上有权限的用户)。
  • 主机名规范问题:部分环境主机名包含 下划线“_”点号“.” 会导致解析异常(如 “Does not contain a valid host:port authority”)。建议主机名仅用字母、数字与连字符,例如 ubuntu-1204-01,并同步更新 /etc/hosts 与所有节点的配置后重启网络/SSH。

五 快速排查清单

  • 核对基础环境:各节点 Java 版本一致、JAVA_HOME 正确、SSH 免密互通、系统时间同步。
  • 核对关键配置:core-site.xmlfs.defaultFS=**hdfs://<hostname>:9000**hdfs-site.xmldfs.replicationdfs.namenode.name.dirdfs.datanode.data.dir 路径可写且一致。
  • 核对网络与端口:NameNode 监听 9000 且对外可达;浏览器访问 9870 正常;必要时关闭防火墙或放行端口。
  • 核对进程与日志:jps 应看到 NameNode/DataNode/SecondaryNameNode;异常时优先查看 $HADOOP_HOME/logs/ 下对应进程的 .log 文件,定位报错行与时间点。

0