在 Linux 上 HDFS 端口被占用,通常不是 HDFS 本身的问题,而是端口已经被别的进程占用或配置冲突导致的。下面从原因到排查给你系统说明。
HDFS 默认会用到这些端口(以 Hadoop 3.x 为例):
| 服务 | 默认端口 |
|---|---|
| NameNode RPC | 8020 |
| NameNode Web UI | 9870 |
| SecondaryNameNode | 9868 |
| DataNode | 9864 / 9866 / 9867 |
| YARN ResourceManager | 8088 |
如果启动时报:
BindException: Address already in use
就说明端口被占。
最常见原因。
jps
如果看到:
已经存在,再启动就会端口冲突。
✅ 解决:
stop-dfs.sh
或
kill -9 <pid>
异常宕机 / 强制关机,进程死了但端口还在 TIME_WAIT。
查看:
netstat -tunlp | grep 8020
# 或
ss -tunlp | grep 8020
✅ 解决:
比如:
查看占用进程:
lsof -i:8020
或
fuser -k 8020/tcp
多次 hdfs namenode -format 但没清理数据目录,也可能出现状态异常。
✅ 建议:
dfs.namenode.name.dirhdfs-site.xml 里可能配置了重复端口:
<property>
<name>dfs.namenode.rpc-address</name>
<value>0.0.0.0:8020</value>
</property>
多个节点或伪分布式重复配置也会冲突。
通常不会“端口被占”,但会导致连不上。
# 1. 看进程
jps
# 2. 看端口
netstat -tunlp | grep 8020
# 3. 看日志
tail -200 $HADOOP_HOME/logs/hadoop-*-namenode-*.log
✅ 启动前:
stop-dfs.sh
jps
✅ 使用独立用户运行 Hadoop
✅ 不手动 kill -9 核心进程
✅ 伪分布式只启动一次
如果你愿意,可以把:
hdfs-site.xmljps 输出发出来,我可以帮你精准定位是哪个端口、被谁占了。