环境
- 服务器是阿里云的ECS服务器
- 安装了ubuntu14.04 linux系统
- 搭建了hadoop2.7.3的集群
- hadoop集群中主机名分别为Master、Slave1、Slave2
- 配置了/etc/hosts 文件,修改主机名和服务器ip映射
遇到的问题
在外网是可以访问http://Master:50070,
无法访问http://Master:8088/clusterjava eclipse 远程访问hadoop,失败,通过百度,谷歌验证配置什么的都正确,错误内容如下
Error:Call From DESKTOP-XXPC/192.168.0.103 to Master:9000 failed on connection exception:java.net.ConnectException:Connection refused:no further information;
- telnet Master:9000不通
总而言之,hadoop集群中我可以访问部分端口。
解决方案
一开始以为是linux防火墙的问题(不过关闭防火墙也是个解决方案,大家也可以尝试下),但是我关闭了还是无法解决上面的问题。
其实问题出在了hosts文件关于主机名和ip映射配置的上面。
阿里云ECS主机提供了2个ip,一个是外网的ip,一个是内网的ip
我一开始的hosts文件用的是内网的ip地址,ip映射如下:
10.171.xxx.xxx Master
10.163.xxx.xxx Salve1
10.165.xxx.xxx Salve2
然后修改成外网ip以后上面的问题就解决了,ip映射如下:
112.126.xxx.xxx Master
125.112.xxx.xxx Slave1
124.112.xxx.xxx Slave2
小结:我们hosts映射的ip是阿里云内网ip,我们在hadoop的配置文件中写的是主机名,比如yarn-site.xml 中<name>yarn.resourcemanager.webapp.address</name>的value为<value>Master:8088</value>,这里规定了我们访问hadoop8088端口时走的是Master对应的内网ip,但是实际访问中,我们是用的Master的公网ip的8088端口,自然就无法从公网访问hadoop的8088端口了(在内网没问题),所以我们把主机映射的iP都改成主机的公网IP,所有的问题就迎刃而解了。