不管是内网集群,还是公网集群(当然一般情况不会这么做),建议这个步骤都不要忽略。内网不一定会出现这个问题,但是公网不做肯定有问题!
前提:
- 在阿里云公网部署三台ecs,都有公网IP,内网有通有不通(测试公网所以忽略);
- 按照全分布模式部署,按照JDK(8)、Hadoop(2.10),各种配置完毕,namenode格式化成功后,start-all.sh启动hadoop,JPS三台服务器各个节点都是按照预设启动。
- hadoop配置文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves都是正常配置,且需要填host的地方都是写的公网IP。
问题:
- 起初的问题是主节点配置文件里面的Host我填的公网IP,但是这样JPS后namenode和resourcemanager就起不来,但是写内网IP又觉得怪怪的;
- 找了一些资料,发现hdfs dfsadmin -report 也没有数据(全是0)而且没有挂载datanode节点,问题严重了;
- 那再试试hdfs dfs -put上传文件,肯定是失败;
为啥几个从节点nodemanager和datanode都启动了,主节点却连不上或者找不到live节点?
解决:其实从主节点配置文件host写公网IP节点起不来,内网IP能起来但是觉得怪已经反应了问题。就是主从节点的访问路径问题,也就是IP的配置问题。
正确的方法:nano /etc/hosts 设置主从节点的域名解析,每个节点的这个文件都要把每个设备的域名解析写上,本机用内网IP、其它节点写公网IP(这是重点),然后在hadoop的配置文件xml里面就可以写主机名代替IP地址(当然首先要配置每个节点的hostname)。
举例:我的三个节点的hosts文件
这是ecs01节点的,所以01节点写的是内网IP(172.23.185.135),其它节点写的是公网IP,以下类推
呃,抱歉,服务器释放了。
ecs02节点的hosts文件里面三个域名解析应该是:
121.43.131.2 ecs01 ecs01 (这是ecs01的公网地址了)
116.62.152.47 ecs03 ecs03
192.168.0.23 ecs02 ecs02 (这里ecs02写的是内网IP咯)
ecs03节点的hosts文件里面三个域名解析应该是:
121.43.131.2 ecs01 ecs01 (这是ecs01的公网地址了)
192.168.1.89 ecs03 ecs03 (这里ecs03写的是内网IP咯)
47.96.102.123 ecs02 ecs02
说白了,这个问题的出现还是自己对于网络和linux系统的知识欠缺
好了,打完收工。
主要是为了自己做记录,同时分享给有需要的人