如图所示,Hadoop的Master节点和Slave节点分布运行在不同的Docker容器中,其中hadoop-master容器中允许NameNode和ResourceManager,hadoop-slave容器中运行DataNode和NodeManager。NameNode和DataNode是Hadoop分布式文件系统HDFS的组件,复杂存储输入以及输出数据,而ResourceManager和NodeManager是Hadoop集群资源管理系统YARN的组件,复杂CPU和内存资源的调度。
为Hadoop集群创建单独的网络:
然后在运行Hadoop容器时,使用“-net=hadoop”选项,这时所有容器将运行在hadoop网络中,它们可以通过容器名称进行通信。
1.下载Docker镜像
2.下载GitHub仓库
3.创建Hadoop网络
ubuntu@VM-54-14-ubuntu:~$ sudo docker network create --driver=bridge hadoop
4.运行Docker容器
5.启动hadoop
6.测试Word count
root@hadoop-master:~# ./run-wordcount.sh
正常情况下,执行结果为:
7.Hadoop的网页管理地址:
NameNode:http://your ip address:50070/
ResourceManager:http://your ip address:8088/
三、N个节点Hadoop集群搭建步骤
1.参考第二部分1~3:下载Docker镜像,下载GitHub仓库,创建Hadoop网络
2.重新构建Docker镜像
./resize-cluster.sh 5
这里选择N=5
3.启动Docker容器
4.启动Hadoop,并运行wordcount。
5.关闭Hadoop集群
root@hadoop-master:~# which hadoop
遇到的问题:
1.运行容器容器未启动:
经过分析,为nginx端口占用,关闭nginx服务,重新执行该命令。另一种方法是修改端口号,但未经过实际验证。
2.
It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.参考解决方案:https://stackoverflow.com/questions/20216614/hadoop-2-2-0-it-looks-like-you-are-making-an-http-request-to-a-hadoop-ipc-port
其中提到:不能通过浏览器访问hdfs地址,该地址是hadoop内部使用的。
