zookeeper对hadoop而言并不是重点,但却是实现HBase的一个重要协调工具。
一、准备
安装用的ZooKeeper可在这个镜像站点下载。我安装使用的zookeeper版本是zookeeper-3.4.6.tar.gz。
1.1 zookeeper是什么
zookeeper提供了一种针对hadoop的分布式协调服务
它包含一个简单的原语集,在命令行界面针对它的操作都是一些简单的命令
分布式应用程序基于它可实现同步服务(数据的事务性一致)、配置服务以及命名服务
1.2 为什么使用zookeeper
一句话总结,zookeeper的使用保证了zookeeper集群之间数据的
事务(原子操作atom,要么全部成功,要么全部失败)性一致
。
ZooKeeper 要想实现自己的功能(事务性一致),要求在 ZooKeeper 集群之间传递的数据不能太大(默认在 2M 以下),
如何理解 ZooKeeper 提供的事务性一致。如果一个 client 对 ZooKeeper 的某一服务器做了一次数据变更,ZooKeeper 会将这一变化同步到所有的服务器上,当同步结束之后,所有的客户端都将获得该数据变更;
二、 搭建 ZooKeeper 服务器集群
首先需明确的是,我们要进行搭建的是ZooKeeper的服务器集群,也即许多服务器服从ZooKeeper的要求联接起来的。集群中的服务器又分1个leader,和其他的follower,一个老大,一群小弟。
ZooKeeper 要求,zk 服务器集群规模不小于三个节点,本文我们就以三个节点为例进行搭建,且要求各服务器之间的系统时间要保持一致(可见各主机的系统时间是 ZooKeeper 实现数据在集群间传输的重要依据指标)。
搭建环节如下
ZooKeeper 下载地址 http://www.us.apache.org/dist/zookeeper/,下载完成之后,解压,设置环境变量,修改配置文件。
(1)解压
tar -zxvf zookeeper-3.4.8.tar.gz
(2)设置环境变量
vim /etc/profile # 添加: # export .:/usr/local/zookeeper-3.4.8/bin:$PATH source /etc/profile
(3)修改配置文件
我们直接修改
conf
文件夹下的zoo_sample.cfg
(也即示例配置文件),进行相关配置,事实上,我们也仅做两次修改(首先将其重命名为zoo.cfg
)。dataDir
将其修改为: dataDir=/usr/local/zookeeper/data # 也即在ZooKeeper根目录下创建 # data文件文件夹 # 因为默认的/tmp/zookeeper会随着系统的关闭重启而清空
在该配置文件的末尾添加:
server.0=hadoop0:2888:3888 # server.0 表示 server 的编号 # hadoop0表示节点主机名 # 2888/3888:端口号 # 一个端口用来传输数据 # 一个端口则用来在ZooKeeper服务器集群中选举产生leader server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888
(4)将配置文件中添加的 server.0(服务器编号) 与主机名相对应
首先需要为ZooKeeper创建一个
data
的文件夹,根据对配置文件的第一处修改,也即将dataDir
的内容修改为/usr/local/zookeeper/data
。
在该路径下:vim myid # 在myid文件中填写内容为:0
(5)将当前节点的ZooKeeper文件夹拷贝到其他节点(以及/etc/profile文件),并相应地修改/data/myid文件为各自的编号;
启动
在三个节点上分别启动:zkServer.sh start
,分别启动时,会在各自的/zookeeper/bin/目录下生成zookeeper.out
日志文件,我们会看到在zoo.cfg
配置文件中添加的配对信息(ZooKeeper服务器与主机名),以及两个端口,我们看到3888
是真正用来选举的,而2888
自然是用来数据传输的。