通过Docker搭建完全分布式Hadoop集群
基于上一篇博客进行拓展
前言
上一次我们搭建了基于Docker的伪分布式Hadoop集群,这次来搭建分布式的
一、为集群单独构建虚拟网络
现在的 Docker 网络能够提供 DNS 解析功能,我们可以使用如下命令为接下来的 Hadoop 集群单独构建一个虚拟的网络:
1 | sudo docker network create --driver=bridge hadoop |
使用下面这个命令查看 Docker 中的网络,可以看到刚刚创建的名为 hadoop 的虚拟桥接网络:
1 | sudo docker network ls |
二、进入上次搭建好的容器
我们通过上次制作的镜像启动一个容器:
1 | docker run -dit --name=master --hostname=master hdp |
我们进入master
容器中
1 | docker exec -it master /bin/bash |
三、配置Hadoop环境
在上一次我们已经配置了一个伪分布式的Hadoop环境,接下来我们需要对那些文件再进一步修改。
1.修改core-site.xml
打开/usr/local/hadoop-3.3.1/etc/hadoop
路径下的core-site.xml
:
1 | cd /usr/local/hadoop-3.3.1 |
修改后是这样的:
1 | <configuration> |
2.修改hdfs-site.xml
1 | vim hdfs-site.xml |
修改后:
1 | <configuration> |
3.修改mapred-site.xml
1 | vim mapred-site.xml |
修改后:
1 | <configuration> |
4.修改yarn-site.xml
1 | vim yarn-site.xml |
修改后:
1 | <configuration> |
5.修改workers
1 | vim workers |
修改后:
1 | master |
注意:master这些后面不要有空格!slave2后面,不要有空的行!自己准备起多少集群,就在这里写几个,要是准备起5个集群,就写到slave4。
四、在Docker中启动集群
1.先将容器导出为镜像
1 | docker commit master nethdp |
2.启动三个终端
第一条命令启动的是
master
做master
节点的,所以要开放一些端口,用来访问web页面1
docker run -dit --network hadoop --hostname=master --name=master -p 9870:9870 -p 8088:8088 nethdp /bin/bash
后面几条命令都类似,只要注意修改名字和主机名就行
1
docker run -dit --network hadoop -hostname=slave1 --name=slave1 nethdp /bin/bash
第三条命令
1
docker run -dit --network hadoop -hostname=slave2 --name=slave2 nethdp /bin/bash
3.接下来在master
主机中启动Hadoop集群
先在hadoop安装目录进行格式化操作,不格式化操作,hdfs起不来(只有第一次启动的时候需要初始化,以后启动就不需要了,先删除所有机器的 data和logs目录,然后再进行格式化):
1 | ./bin/hdfs namenode -format |
然后启动HDFS集群:
1 | ./sbin/start-dfs.sh |
最后,启动yarn集群管理节点:
1 | ./sbin/start-yarn.sh |
都启动完成后,使用 jps 命令查看:
1 | jps |
可以看到,除了Jps,一共有5个进程,因为这里没有将 nameNode、ResourceManager、SecondaryNameNode分开部署,所以都在 h01这一台机器上,实际生产中,应该是需要分开部署的。
至此,Hadoop 集群已经构建好了。
五、网页访问
1.浏览器访问本机的9870端口
2.浏览器访问本机的8088端口
参考: