准备环境:已经用docker搭建好Hadoop集群
1、在zookeeper官网下载zookeeper压缩包,点击蓝色字体即可进入官网
选择你想要的版本目录,点进去后点击你要的版本-bin.tar.gz压缩包,这里用3.5.7版本做演示
下载好后上传虚拟机主机,这里用Xftp7上传,可能会上传出错
有三种可能:防火墙没关闭,虚拟机主机内存不够,文件权限不够
(1)查看防火墙状态:
systemctl status firewalld
关闭防火墙:
systemctl stop firewalld
(2)查看内存
(3)赋予权限
sudo chmod 777 /opt/module
我上传到/opt/module文件夹,注意是上传的那个文件夹的全路径
2、解压、改名和修改配置
解压可以在Xftp7手动解压或者用tar命令行,因为文件夹名字太长了,操作不方便,所以解压后给文件夹改名为zookeeper-3.5.7
修改配置:
(1)将/opt/module/zookeeper-3.5.7/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
(2)打开zoo.cfg文件,修改dataDir路径:
修改如下内容:
dataDir=/opt/module/zookeeper-3.5.7/zkData
(3)在/opt/module/zookeeper-3.5.7这个目录下创建zkData文件夹
3、复制zookeeper-3.5.7文件夹到Hadoop集群的每个容器里
docker cp /opt/module/zookeeper-3.5.7 hadoop1:/opt/module/zookeeper-3.5.7
docker cp /opt/module/zookeeper-3.5.7 hadoop2:/opt/module/zookeeper-3.5.7
docker cp /opt/module/zookeeper-3.5.7 hadoop3:/opt/module/zookeeper-3.5.7
cp后面先加主机的zookeeper-3.5.7文件夹的全路径,再加个空格,然后加上容器名和想要上传的文件夹路径
hadoop1、hadoop2、hadoop3是我Hadoop集群的三个容器名,换成你自己的就行了
4、运行容器并进入容器
运行容器:docker start 容器名
进入容器:docker exec -it 容器名 /bin/bash
5、启动zookeeper服务器
进入/opt/module/zookeeper-3.5.7文件夹,输入:
cd /opt/module/zookeeper-3.5.7
再启动zookeeper服务器,输入:
./bin/zkServer.sh start
这时会提示权限不够
给文件赋予权限,输入:
chmod a+xwr ./bin/zkServer.sh
再启动zookeeper服务器,输入:
./bin/zkServer.sh start
启动成功!其他容器重复 4、5步骤即可。
6、集群搭建
在每个容器中重复以下操作:
(1)进入zkData文件夹,输入:
cd /opt/module/zookeeper-3.5.7/zkData
(2)添加配置文件,配置服务器编号,输入:
vi myid
设置hadoop1为第一台zookeeper服务器
设置hadoop2为第二台zookeeper服务器
设置hadoop3为第三台zookeeper服务器
(3)配置zoo.cfg文件
进入conf文件夹,输入:
cd /opt/module/zookeeper-3.5.7/conf
修改zoo.cfg文件,输入:
vi zoo.cfg
添加:
#######################cluster##########################
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
参数解读:server.A=B:C:D
A:服务器编号
B:服务器ip地址或者域名
C:服务器与leader服务器通信的端口号
D:选举端口号(leader服务器挂了之后,follower服务器重新选举leader服务器的端口号)
(4)每个容器配置好后,都重启zookeeper服务器,输入:
cd /opt/module/zookeeper-3.5.7
再输入:
./bin/zkServer.sh start
查看节点运行状态,输入:
./bin/zkServer.sh status
hadoop1:follower
hadoop2:follower
hadoop3:leader
7、在hadoop1中编写管理集群脚本文件(需要配置ssh免密登录)
(1)编写zk.sh
把文件放在/opt/module/zookeeper-3.5.7/bin目录下,输入
cd /opt/module/zookeeper-3.5.7/bin
再输入:
vi zk.sh
#!/bin/bash
case $1 in
"start"){
for i in hadoop1 hadoop2 hadoop3
do
echo ------------ zookeeper $i 启动 --------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in hadoop1 hadoop2 hadoop3
do
echo ------------ zookeeper $i 停止 --------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in hadoop1 hadoop2 hadoop3
do
echo ------------ zookeeper $i 状态 --------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
}
;;
esac
将上面的内容填入zk.sh中,保存退出后,输入:
./zk.sh start
./zk.sh status
./zk.sh stop
(2)编写jpsall
还是放在/opt/module/zookeeper-3.5.7/bin目录下,输入:
vi jpsall
#!/bin/bash
# 执行jps命令查询每台服务器上的节点状态
echo ======================集群节点状态====================
for i in hadoop1 hadoop2 hadoop3
do
echo ====================== zookeeper $i ====================
ssh $i "jps"
done
echo ======================执行完毕====================
将上面的内容填入jpsall中,保存退出后,输入:
./jpsall