接上篇:虚拟机上的Hadoop伪分布式和完全分布式的搭建
搞来了三台阿里云服务器:
镜像:都是CentOS 7
JDK版本是1.8,
Hadoop版本是2.7.2,与上一篇虚拟机搭建用的软件包一致。
一、集群规划
hadoop101:NameNode,SecondaryNameNode,DataNode,NodeManager
hadoop102:DataNode,NodeManager
hadoop103:ResourceManager,DataNode,NodeManager
二、搭建:
基本步骤与上一篇一样,配置文件需要配置的内容也都一样。这里只说使用阿里云服务器搭建与虚拟机不同的地方。
问题一:
按照上篇文章配置方式配置完了以后,启动NameNode的时候起不来。
发现在/etc/hosts文件配置除了需要配置外网映射还要配置NameNode节点的内网,否则NameNode起不来,所以ResourceManager所安装的节点也需要配置该主机的内网。
hadoop101的hosts文件配置地址:
47.100.xx.xxx hadoop101 #hadoop101外网地址映射
120.79.xxx.xxx hadoop102
39.108.xxx.xxx hadoop103
172.19.xxx.xxx hadoop101 #hadoop101内网地址映射
可以配内网地址也可以配127.0.0.1 hadoop101
然后就可以顺利启动整个集群了。
问题二:
关闭了防火墙,然后在hadoop101上传文件时,还是说通过50010端口数据传不过去:
INFO hdfs.DFSClient: Exception in createBlockOutputStream和
java.io.IOException: Got error, status message , ack with firstBadLink as
这个时候web查看文件:只有hadoop101节点上保存了块,其他两个节点并没有。
解决问题二:
在Linux已经确实关闭防火墙了,但却还是说端口过不去,然后就发现阿里云服务器除了在Linux系统关闭防火墙,还需要在阿里云控制台开发端口:
既然说了50010端口过不去,那就给它开个50010端口:
这是hadoop101阿里云ECS服务器控制台截屏:
这是hadoop103阿里云轻量级服务器控制台截屏:
hadoop102并不需要在控制台操作,只需要在linux系统关闭防火墙即可,但其他两台不仅要在linux关闭,还要在控制台关闭。三台服务器都是不同时期买的,为什么会出现这样的差异情况也不清楚。
分割线
操作到这一步,开始上传文件,在NameNode节点也就是hadoop101上上传文件时,一切正常:
分割线
问题三:
但是在hadoop102和hadoop103上上传文件时,就出现问题了:
java.io.IOException: Got error, status message , ack with firstBadLink as 172.19.xxx.xxx:50010
这个172.19.xxx.xxx为hadoop101的内网ip。大概意思应该是尝试通过内网IP的50010端口传入数据失败。令人头疼的事情就出现了:在hadoop101节点hosts文件配内网ip地址的话,传数据会从这个内网传入,如果不配内网ip的话,NameNode启动不了。
然后在web页面查看:
只有hadoop102和hadoop103上有存储块,hadoop101节点上竟然没有:
所以就可以才猜测到,NameNode在内部使用的是内网地址,具体细节不太清楚。现在这个问题还没有解决。(希望知道如何处理的相互交流一下。)
在往后对集群的操作只能先在hadoop101上操作。
分割线
我试了一下在阿里云服务器控制台单独删了hadoop103开放的50010端口之后。
在hadoop101上传文件就得到下面的情况:
19/07/19 12:32:34 INFO hdfs.DFSClient: Exception in createBlockOutputStream
java.io.IOException: Got error, status message , ack with firstBadLink as 39.108.xxx.xxx:50010