版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011170921/article/details/80437937
注:master: hadoop1 ;
slaves : hadoop2 ,hadoop3
Call From hadoop3/192.168.91.132 to hadoop1:9000 failed on connection exception。
报错截图
上图为hadoop3使用hadoop fs -ls命令时报错;也有在hadoop1使用hadoop fs -ls时报错的情况。
报错原因
- 防火墙没有关闭
- 主节点9000端口没有打开
- 主节点9000端口打开了,但是不允许远程访问(一般是这个)
报错解决(简易步骤)
- 关闭hadoop集群
sh HADOOP_HOME/sbin/stop-all.sh
- 关闭防火墙
service iptables stop
chkconfig iptables off
- 正确配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
需保证fs.defaultFS值使用的是
主机名称或者IP地址,不能使用localhost或者127.0.0.1。
- 关闭NetworkManager服务
service NetworkManager stop
chkconfig NetworkManager off
- 正确配置/etc/hosts
- 重启hadoop集群
sh HADOOP_HOME/sbin/start-all.sh
报错解决(详细说明)
- 验证所有节点的core-site.xml是否正确配置
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
需保证fs.defaultFS值使用的是
主机名称或者IP地址,不能使用localhost或者127.0.0.1。
- netstat -tlpn 检查主节点9000端口是否打开,且允许远程访问
一般而言,只要启动了hadoop集群,9000端口就已经开放。以上截图中可以看到,9000端口已经打开,并允许远程当问(可使用telnet ip port 检验)。如果9000端口前的ip地址是
127.0.0.1,说明只能本地访问,从节点使用hadoop命令会报错。
注意,最好验证一下
主节点本身是否能够也能访问该端口,如果不能访问,则在主节点上使用hadoop命令就会报错。
主节点本身可以访问master:9000(此处使用127.0.0.1会被拒绝)
从节点也能够访问master:9000
- 检查所有节点的/etc/hosts配置是否正确
如果9000端口前面的IP地址是127.0.0.1的话,那可能是/etc/hosts文件中为配置有问题。如果/etc/hosts出现127.0.0.1 localhost.localdomain localhost,那么启动hadoop集群后,使用netstat命令查看端口监听情况的话,会发现9000端口前的IP地址变成了127.0.0.1,而不是master对应的IP地址(此案例为192.168.91.130),从而导致从节点访问master:9000被拒绝,但master本机可以正常使用hadoop命令。
查看namenode的hadoop-root-namenode-hadoop1.out日志,可以看到,启动集群后主节点监听9000的IP地址变成了127.0.0.1.
而查看datanode的hadoop-root-datanode-hadoop3.out日志,可以看到,启动集群后,从节点请求的仍然是192.168.91.130,但是主节点监听的地址已经变成了127.0.0.1:9000。
/etc/hosts正确的配置如下图
/etc/hosts错误的配置如下图
需要把上图标红的两行去掉就行,如果去掉保存后,重启机器仍出现该两行,只需关闭NetworkManager服务即可,该服务会自动修改hosts文件,添加上图标红的两行。
- 关闭NetworkManager服务
service NetworkManager stop
chkconfig NetworkManager off
个人拙见,欢迎讨论,共同进步