今天在启动 hadoop 的时候,发现本应该同时启动的 namenode、secondary namenodes 却都没有启动。我还以为是坏了又重新装了虚拟机,重新下载 Hadoop 重新配置结果还是同样的问题,那没办法只能去解决问题了。
首先先再次尝试启动看他报错是什么。
好这个 namenode 是启动失败的了,那么报错信息翻译过来就算连接超时嘛。
其实这个应该还是很好解决的,我上网一搜还是很多效果教程的,但结果出乎意料的网上的就没有一个是我实用的,因为我花了一个下午的时间去一个个方法试过了都不起作用🤦。那来我这手把手教你如何排查如何解决此问题:
首先我这边错误的情况是:运行start-all.sh脚本后,尝试连接到主机xxx的22端口时超时,namenodes和secondary namenodes启动失败,而datanodes、resourcemanager和nodemanagers可能启动成功。
可能的根本原因包括:SSH服务未运行、防火墙设置阻止了连接、网络配置问题(如IP或主机名解析错误)、SSH密钥认证问题,或者主机名配置不正确。
首先检查SSH服务是否在 主机上运行,使用 systemctl status sshd 或 service ssh status 命令。如果服务未启动,需要启动它。接着查看防火墙状态,确认22端口是否开放,可能需要临时关闭防火墙或添加规则。
然后检查网络连通性,尝试 ping xxx 是否正常,还有SSH密钥配置是否正确,用户是否设置了无密码登录,尤其是在Hadoop集群中,各节点之间通常需要配置免密SSH。需要确认公钥是否添加到 authorized_keys 文件中,权限是否正确。
检查SSH服务状态
systemctl status sshd # 查看SSH服务状态
sudo systemctl start sshd # 如果未运行,启动SSH服务
验证本地SSH连接
ssh xxx
如果连接失败,可能原因包括:
-
SSH服务未运行。
-
防火墙阻止了SSH端口(默认22)。
-
/etc/hosts
或 DNS 解析错误。
检查防火墙设置
确保防火墙允许SSH端口(22)的通信:
sudo ufw status # 查看防火墙状态(Ubuntu)
sudo firewall-cmd --list-ports # CentOS/RHEL
如果防火墙启用且未开放22端口:
sudo ufw allow 22 # Ubuntu
sudo firewall-cmd --permanent --add-port=22/tcp && sudo firewall-cmd --reload # CentOS
好经过上面的检查如果一切正常,再次尝试启动看看能不能启动了,好如果还不行也可以看看尝试单独启动:
单独启动的命令可以看:https://blog.csdn.net/m0_74132943/article/details/142152157?spm=1001.2014.3001.5501
如果你尝试了上面的内容后还是无法启动:那么继续:
检查主机名解析
确保 /etc/hosts
文件中 xxx
正确映射到本机IP(非127.0.0.1
或127.0.1.1
):
vi /etc/hosts
修改完后记得:wq 保存文件;红色部分是你的 ip 地址,还有你的主机名。再重试启动Hadoop
【来到这里,我的问题就解决了,因为我打错了,如图所示,我打成了 192.169.xxx.xxx ,实际上应该是 192.168.xxx.xxx 】
如果你的尝试了还是不行,别急后面还有几个通用招:
验证SSH密钥认证
Hadoop需要无密码SSH登录到本机和其他节点。生成密钥并添加到授权列表:
ssh-keygen -t rsa # 生成密钥(如果不存在)
ssh-copy-id xxx # 将公钥复制到本机
检查 ~/.ssh/authorized_keys
是否包含你的公钥。
检查Hadoop配置文件
确认Hadoop配置文件中没有错误的主机名引用:
-
core-site.xml: 检查
fs.defaultFS
配置。 -
hdfs-site.xml: 检查
dfs.namenode.rpc-address
。 -
workers 或 slaves 文件:确认列出的主机名正确。
调试SSH连接
添加 -v
参数查看详细的SSH连接日志:
ssh -v xxx
观察日志中哪一步失败(例如密钥认证、网络超时)。
临时关闭SELinux(仅限测试环境):
如果SELinux阻止SSH,临时关闭它:
sudo setenforce 0 # 临时禁用
sudo vi /etc/selinux/config # 永久禁用需修改为SELINUX=disabled
验证网络接口
确保网络接口(如 eth0
或 ens33
)处于活动状态:
ip a # 查看IP地址分配
总结
根据你的错误信息,最可能的原因是:
-
SSH服务未启动。
-
防火墙阻止了SSH端口。
-
/etc/hosts
中 xxx 解析到了错误的IP地址。 -
未正确配置无密码SSH登录。
请按上述步骤逐一排查,并在完成每步后尝试重启Hadoop:
stop-all.sh
start-all.sh
如果问题仍然存在,请提供以下信息:
-
cat /etc/hosts
-
ssh -v xxx
的输出片段 -
systemctl status sshd
的结果
如果你进行了这些操作还是失败,或是还有其它问题,欢迎私信或评论区讨论
希望文章的内容可以帮到你 : )
如果文章对你有帮助,记得 点赞、收藏、关注👍⭐🧧