最近学习Hadoop 时发现在本机访问 hadoop 9000 端口没有问题,但是远程机器访问 9000端口时不能访问,通过telnet 命令诊断发现发现无法访问端口,经过网上搜索解决方案结合自己实践,总结解决办法一般有以下几点。
首先,利用netstat -tpnl查看的端口开放情况
下图中9000端口只能本机访问
下图中的9000端口可以通过192.168.1.105访问
1、防火墙未关闭或防火墙打开但是为开放9000端口
解决办法:通过 service iptables stop 命令关闭防火墙(开发环境一般直接关闭防火墙,生产环境需要配置防火墙,具体配置可以网上搜索)
2、配置本机名与地址的映射
解决办法: 修改/etc/hosts 文件,加入 IP地址与机器名的映射关系。
如下图红框所示:
duanxz@three:/usr/local/hadoop-2.7.6/logs$ cat /etc/hosts
192.168.1.105 three
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost4 localhost4.localdomain4
注意,若发现127.0.0.1 与机器名存在映射关系,需要删除映射关系(如下图红色框所示),否则hadoop 会把机器名映射到127.0.0.1 上去,也就是我遇到的问题,本机可以访问,其他机器不能访问。
正确的是
网络配置好后,hadoop相关的很多东西要重新设置一次。
1、ssh的重新配置
2、hadoop中相关配置中的localhost修改为域名,如示例中three,主要是core-site.xml
3、hadoop namenode -format
若格式化时显示机器名与Ip映射关系为127.0.0.1 那么说明配置不成功,只能本机访问:
若格式化时显示机器名与IP映射关系为正常的网络地址,说明配置成功。如下图所示:
3、重启hadoop
测试:
1、换一台机器,telnet相应的ip:port成功:
2、java客户端连接