ubuntu下hdfs故障排查指南
小樊
33
2025-12-30 13:40:17
Ubuntu下HDFS故障排查指南
一 快速定位流程
- 检查进程是否齐全:执行jps,应看到NameNode、DataNode、SecondaryNameNode(或 JournalNode 等)。缺进程优先看日志与端口占用。
- 核对服务状态与端口:
- NameNode Web UI:Hadoop 3.x 为 9870,Hadoop 2.x 为 50070。
- 常用端口:50010/50020/50075(DataNode)、50090(SecondaryNameNode)。
- 查看关键日志:$HADOOP_HOME/logs/ 下的 hadoop--namenode-.log 等,优先从最新的 ERROR/WARN 入手。
- 基础连通与权限:
- 本机/跨机连通性:如 ssh localhost 免密是否可用。
- 防火墙/安全组:确认 9870/50070 及数据端口未被阻断。
- 资源与空间:执行 hdfs dfsadmin -report 与 df -h,关注 DFS Used%、Remaining、Live Nodes 与系统磁盘余量。
- 客户端命令有效性:Hadoop 3.x 推荐使用 hdfs dfs … 系列命令(如 hdfs dfs -ls /)。
二 高频故障与修复
- NameNode 未启动或启动即退出
- 核对 hadoop-env.sh 中 JAVA_HOME 是否正确;首次部署需执行一次且仅一次 hdfs namenode -format(注意:每次格式化会清空元数据)。
- 使用 start-dfs.sh 启动后,用 jps 确认进程;若仍异常,查看 $HADOOP_HOME/logs/ 报错。
- 以 root 操作时,需在 sbin/start-dfs.sh / stop-dfs.sh 中设置用户变量(Hadoop 3.x 建议用 HDFS_DATANODE_SECURE_USER 替代已废弃的 HADOOP_SECURE_DN_USER)。
- 安全模式无法退出
- 现象:写入报错 “NameNode is in safe mode”;执行 hdfs dfsadmin -safemode get 仍为 ON。
- 处理:先查 hdfs dfsadmin -report 与 df -h,若 Remaining 极小或 DFS Used%≈100%,需扩容磁盘/清理数据后再退出安全模式(必要时临时 hdfs dfsadmin -safemode leave)。
- 权限被拒绝
- 现象:Permission denied。
- 处理:在 HDFS 上调整权限/属主,如 hdfs dfs -chmod 755 /user/hadoop、hdfs dfs -chown : ;必要时以具备权限的用户执行。
- 客户端命令不可用或版本不兼容
- 现象:命令不存在或报参数错误。
- 处理:Hadoop 3.x 使用 hdfs dfs … 替代老版 hadoop dfs …;确认 $HADOOP_HOME/bin 在 PATH。
- 端口访问异常
- 现象:浏览器打不开 9870/50070 或远程访问失败。
- 处理:核对 core-site.xml / hdfs-site.xml 的 fs.defaultFS 与主机名绑定;关闭或放行防火墙/安全组对应端口;必要时改用主机 IP 访问。
- 集群外访问失败
- 现象:跨节点/公网访问异常。
- 处理:确认网络路由、端口可达、客户端配置与集群一致(如 core-site.xml 的 fs.defaultFS、认证方式等)。
三 配置与运维要点
- 首次部署与升级
- 首次启动前执行一次 hdfs namenode -format;升级或迁移前务必备份 dfs.namenode.name.dir 与 dfs.datanode.data.dir 下的元数据与数据。
- 以 root 启停的安全做法
- 在 sbin/start-dfs.sh / stop-dfs.sh 顶部显式设置:
- HDFS_NAMENODE_USER=root
- HDFS_DATANODE_USER=root
- HDFS_SECONDARYNAMENODE_USER=root
- HDFS_DATANODE_SECURE_USER=hdfs(Hadoop 3.x 使用此变量)
- 主机名与 SSH
- 确保 /etc/hosts 或 DNS 正确解析各节点主机名;ssh localhost 免密可用。
- 若使用 pdsh 启动报错(如 “Connection refused”),设置 export PDSH_RCMD_TYPE=ssh。
- 版本差异注意
- Hadoop 3.x 的 NameNode Web UI 端口为 9870(非 50070);Hadoop 2.x 为 50070。
- 客户端命令规范
- Hadoop 3.x 推荐使用 hdfs dfs … 系列命令(如 hdfs dfs -mkdir -p /data/input)。
四 常用命令清单
- 进程与服务
- 启动/停止:start-dfs.sh / stop-dfs.sh
- 进程检查:jps
- 空间与节点
- 集群报告:hdfs dfsadmin -report
- 安全模式:hdfs dfsadmin -safemode get|leave
- 文件与目录
- 列目录:hdfs dfs -ls /
- 创建目录:hdfs dfs -mkdir -p /path
- 上传/下载:hdfs dfs -put local /hdfs、hdfs dfs -get /hdfs local
- 权限/属主:hdfs dfs -chmod 755 /path、hdfs dfs -chown user:group /path
- 日志与端口
- 日志路径:$HADOOP_HOME/logs/
- Web UI:Hadoop 3.x 访问 9870,Hadoop 2.x 访问 50070
五 进阶排障与预防
- 时间与一致性
- 集群节点时间漂移会引发 块丢失/异常,建议使用 NTP 统一校时。
- 磁盘与均衡
- 节点内多磁盘使用率不均衡或数据分布异常,执行 HDFS Balancer;注意 dfs.datanode.failed.volumes.tolerated 与 dfs.datanode.data.dir 配置,避免因磁盘故障导致 DataNode 无法启动。
- 客户端与网络
- 调整 HDFS Shell 日志级别以定位问题;公网/跨域访问需确保端口与策略正确;避免使用已废弃的传输/套接字选项。
- 容量与配额
- 当 DFS Used% 接近 100% 时,集群可能进入安全模式或写入失败,需扩容或清理;目录/用户配额不足也会导致写入异常。