在master、slave1、slave2三个节点上部署zookeeper
zookeeper:zookeeper-3.4.9
一、配置其中一个节点
1.解压安装
将zookeeper-3.4.9的压缩包解压在/home/hadoop/hadoop_home/下(个人习惯,路径自定义)
tar -zxvf zookeeper-3.4.9.tar.gz -C /home/hadoop/hadoop_home/
2.复制/home/hadoop/hadoop_home/zookeeper-3.4.9/conf目录下的zoo_sample.cfg,改名为zoo.cfg (个人习惯,防止配置的时候把文件玩坏)
cp zoo_sample.cfg zoo.cfg
3.在/home/hadoop/hadoop_home/zookeeper-3.4.9/目录下创建文件夹zkData
mkdir -p zkData
4.配置zoo.cfg文件
修改dataDir
dataDir=/home/hadoop/hadoop_home/zookeeper-3.4.9/zkData
在文件中添加以下信息:
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=master:2888:3888
注:
zkData文件夹是用来存放快照数据的
server.1=slave1:2888:3888
server.a=b:c:d
a表示服务器的编号,可以是12345任意数
b是服务器a的ip(我用的是主机名)
c是a服务器与集群中的leader服务器交换信息的端口
d是备用端口,万一leader服务器挂了,需要一个端口来重新进行选举,选出一个新的leader,而这个端口就是用来执行选举时服务器相互通信的端口
5.在zkData目录下创建myid文件,并在myid文件中加入当前主机对应的服务器编号
vim myid
比如我当前正在配置的主机是master,是server.3,那么服务器编号就是3
二、配置其他节点
1.将配置好的zookeeper发送到其他节点上
scp -r zookeeper-3.4.9/ hadoop@slave1:/home/hadoop/hadoop_home
2.将其他节点上的myid文件中的服务器编号修改为其所对应的服务器的编号,如slave1节点是1号服务器,那么myid中的编号应该为1
三、对zookeeper的基本操作
1.启动zookeeper
在/home/hadoop/hadoop_home/zookeeper-3.4.9/bin/目录下运行
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ls
README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh zookeeper.out
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
2.查看状态
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$
3.停止zookeeper
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$ ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /home/hadoop/hadoop_home/zookeeper-3.4.9/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
hadoop@slave1:~/hadoop_home/zookeeper-3.4.9/bin$
四、注意!
启动zookeeper时可能会出现这样的一个错误:
bin/zkServer.sh: 81: /opt/zookeeper-3.4.9/bin/zkEnv.sh: Syntax error: "(" unexpected (expecting "fi")
原因是脚本里面用到的shell版本与系统当前使用的shell版本不兼容,导致异常。
查看当前ubuntu系统的shell,默认是使用dash,但是脚本里面是使用的bash,问题就在这里了。
解决办法:
root用户修改当前系统的shell版本:把dash改成bash
root@master:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 13 14:56 /bin/sh -> dash
root@master:~# ln -sf bash /bin/sh
root@master:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 12 21:53 /bin/sh -> bash
root@master:~#