我正在尝试在dockerized环境中设置Hadoop集群,并且在以Swarm模式运行时出现一些问题。即,我无法访问资源管理器(http://host_ip:8088
)的Web UI。其他Web界面,例如hdfs(http://host_ip:50070
)或Spark历史记录服务器(http://host_ip:18080
)都可以正常工作。
通过群模式,我的意思是通过docker init...
和docker join...
加入两个docker deamons主机,并使用docker network create --attachable --driver=overay my-net
创建一个覆盖网络。然后使用以下命令运行主节点:
docker run --name $HADOOP_MASTER -h $HADOOP_MASTER --net=my-net \
-p 8088:8088 -p 50070:50070 -p 50090:50090 \
-p 8080:8080 -p 18080:18080 -p 4040:4040 \
-itd "$IMG_NAME"
其后是启动名称节点和资源管理器。
使用以下命令运行从属节点
docker run --name $HADOOP_SLAVE -h $HADOOP_SLAVE --net=my-net -itd "$IMG_NAME"
随后在每个从属节点中启动一个数据节点和一个节点管理器。
所有节点都正确连接,我可以通过运行以下命令来确保这一点:
yarn node -list --> nodes are displayed
hdfs dfsadmin -report --> again nodes are displayed
jps --> resource manager, node managers, name node and data nodes are running
通过运行docker port hadoop-master
,将显示以下输出:
4040/tcp -> 0.0.0.0:4040
50090/tcp -> 0.0.0.0:50090
8088/tcp -> 0.0.0.0:8088
50070/tcp -> 0.0.0.0:50070
18080/tcp -> 0.0.0.0:18080
8080/tcp -> 0.0.0.0:8080
当我在Docker容器中键入curl -v hadoop-master:8088
时,得到一个肯定的响应,即该服务正在运行,但是在docker deamon主机curl -v localhost:8088
中尝试运行该服务时,控制台将输出:
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer
通过使用netstat -naop
,我可以确认端口:8088
正在监听,因此我不知道这里可能有什么问题。此外,我想指出的是,在其中一个docker deamons主机中使用网桥网络和相同的命令设置时,我能够访问资源管理器(http://host_ip:8088
)的Web ui。仅在使用覆盖两个主机的覆盖网络时出现此问题,并且容器中的:8088
端口形式似乎未正确映射到docker deamon主机的端口。