从今天开始,我将原原本本的讲述,如何利用Docker从头到尾搭建一个大数据hadoop环境。
首先,先介绍需要搭建的服务器集群环境,见下图:
![v2-327b0592b5bbb63f74c53e854d2092ff_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/2b7fed8ef0a119b2cd399bc77ef1b38f.jpeg)
总共13台机器(13个docker 容器),其中:
namenode 2个节点,一主一备;
journalnode 3个节点;
resourceManager2个主节点,一主一备;
datanode 3个节点
zookeeper 3个节点
接下来具体一步一步开始:
准备工作
容器内默认是互相不能访问的,这个时候我们需要一个工具(这里推荐weave),先要让容器间可以互相访问,这样大数据间才能正常通信:
所有主机都需要安装
$ curl -L git.io/weave -o /usr/local/bin/weave
$ chmod a+x /usr/local/bin/weave
测试是否安装成功
weave version
接下来在weave的主节点上:
weave launch
在其他需要跨物理机互访的节点上:
weave launch ip1 ip2 ip3 ipn......
解析:ip1是前面启动的weave主节点,其他ip是物理机间容器需要互相通信的局域网ip地址
分别对weave状态进行查询
weave status
搭建zookeeper
启动zookeeper基础容器
docker run -itd --name zk XXX /usr/sbin/init
解析:
XXX是镜像的名称,此镜像应该是之前已经制作好的镜像,里面包括了下载的SSH、zookeeper文件以及JDK
注意:镜像的环境变量需要提前配置好,参考如下:
具体的环境变量的路径,根据你实际安装的路径修改:
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.5.5
PATH=$PATH:$ZOOKEEPER_HOME/bin
启动容器后,修改配置
进入zookeeper文件夹的conf目录
cd /usr/local/conf/
将sample文件拷贝
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg文件
vim zoo.cfg
修改:dataDir=zookeeper/tmp
并在文件最后添加:
在最后添加:
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
保存退出后,再创建一个tmp文件夹
mkdir /zookeeper/tmp
再创建一个空文件
touch /zookeeper/tmp/myid
最后向该文件写入ID
echo 1 > /zookeeper/tmp/myid
配置完成,提交zookeeper容器为zookeeper的基础镜像
docker commit zk zk:base
到这里,你的zookeeper的主节点镜像就部署好了。
启动3个zookeeper就很简单了,只需要基于zk:base镜像,创建3个容器,修改下配置就可以
部署zk1、zk2、zk3
注意:为保证容器间可以正常通过zk1、zk2这样的主机名直接通信,运行容器前先需要设置weave变量
先运行:
eval $(weave env)
接着启动容器:
docker run -d --privileged=true -v /home/docker/hadoop/zookeeper/zk1:/zookeeper --name zk1 zk:base /usr/sbin/init
解析:
-v 参数:将本机的文件夹目录与容器内目录共享
–privileged 特权模式,防止出现权限不足的情况,尤其是需要开机启动的服务
–name 将此容器命名为 zk1
设置myid:
echo 1 > /zookeeper/tmp/myid
这样zk1就设置完成,启动服务
zkServer.sh start
运行jps命令,如果和下图一致就成功
![v2-12139d76f79db78238ed590f543fe90d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94d64b2fc116eb2cf69cb5d61c5202f.png)
其他的zk2、zk3等等,只需要基于基础镜像启动容器,并把/zookeeper/tmp/myid的值改为2、3就可以了
注意:一定要保证容器间能正常通过容器名通信,如在zk2的容器内,
ping zk1
试一下,能正常通信才是集群搭建的基础‘
设置开机启动:
chmod u+x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local
文件中输入并保存:
/usr/local/apache-zookeeper-3.5.5/bin/zkServer.sh start
至此,一个完整的三个节点的zookeeper集群就搭建完成。
如果需要查看zookeeper的状态,只需要运行命令:
zkServer.sh status
能看到这个节点是leader还是follower(理论上只有一个leader)
结尾发福利啦!免费云主机,下方链接领取:
免费云主机
原文出处:
下一讲如何
搭建namenode及resourceManager禁止转载,违者必究!