Ubuntu 环境下 HDFS 网络问题的排查与修复
一 快速定位流程
- 检查进程是否都在:运行 jps,应至少看到 NameNode、DataNode(若启用 YARN,还会看到 ResourceManager、NodeManager)。若进程缺失,先启动相应服务再继续排查。
- 验证监听端口:确认 NameNode RPC 端口(默认 9000) 处于监听,执行:sudo ss -lntp | grep 9000。
- 连通性测试:
- 本机到 NameNode:telnet <namenode_ip> 9000;若不通,多半是服务未起、端口未监听或被防火墙拦截。
- 跨机测试:从客户端 ping <namenode_ip>;若 ping 不通,先解决网络层问题(IP、路由、虚拟网络模式)。
- 服务状态:若端口未监听或服务未启动,回到 Hadoop 启动流程并查看日志定位根因。
二 常见症状与对应修复
三 必须放行的端口与访问方式
| 端口 |
用途 |
访问方式 |
| 9000 |
HDFS RPC(NameNode) |
hdfs://:9000 |
| 50070 |
NameNode Web UI |
http://:50070 |
| 50075 |
DataNode Web UI |
http://:50075 |
| 50010 |
DataNode 数据传输 |
内部数据读写 |
| 50020 |
DataNode IPC |
内部通信 |
| 50090 |
SecondaryNameNode Web UI |
http://<2nn>:50090 |
- 说明:部分发行版或版本可能使用 8020 作为 RPC 端口(常见于某些 Hadoop 发行包/配置);以你的 core-site.xml 中 fs.defaultFS 实际端口为准。
- 防火墙放行示例(Ubuntu ufw):sudo ufw allow 9000,50070,50075,50010,50020,50090/tcp。
四 配置与主机名解析要点
- 统一主机名与解析
- 设置主机名:sudo hostnamectl set-hostname hadoop1。
- 配置 /etc/hosts:例如 “172.24.70.234 hadoop1”,所有节点保持一致,避免 DNS 不一致导致节点互访失败。
- 正确设置 core-site.xml 与 hdfs-site.xml
- core-site.xml:
- fs.defaultFShdfs://hadoop1:9000
- hdfs-site.xml:
- dfs.replication3
- dfs.namenode.name.dir/path/to/namenode
- dfs.datanode.data.dir/path/to/datanode
- 客户端代码或配置需与服务器端一致:例如 Configuration 设置 “hdfs://hadoop1:9000”。
五 日志与进一步排查
- 查看 NameNode/DataNode 日志(路径因安装方式而异,常见在 $HADOOP_LOG_DIR 或安装目录下的 logs/):
- tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log
- tail -f /var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log
- 若进程异常退出或端口未监听,日志通常能直接指出配置错误、权限问题或磁盘目录异常。
- 网络性能与稳定性(可选):在节点间使用 iperf/netperf 测试带宽与延迟,必要时调整 HDFS 块大小/副本数 以适配网络状况。