初识ZooKeeper
Hadoop下面的子项目ZooKeeper是一个用于协调分布式程序的服务。我们可以利用它来保证各个机器之间的数据同步。
单机环境运行ZooKeeper
1 下载ZooKeeper:http://labs.xiaonei.com/apache-mirror/hadoop/zookeeper/zookeeper-3.2.2/zookeeper-3.2.2.tar.gz
2 解压。
3 在conf目录下创建一个配置文件zoo.cfg,然后指定其中的内容为:
tickTime=2000 dataDir=/home/admin/aaron/data clientPort=2181
4 创建/home/admin/aaron/data文件夹,用于存放ZooKeeper的同步数据。
5 启动ZooKeeper的Server: sh bin/zkServer.sh start
这样,我们的ZooKeeper的Server就运行起来了。我们将看到这样一些信息:
[admin@hadoop1 zookeeper-3.2.2]$ sh bin/zkServer.sh start
JMX enabled by default
Using config: /home/admin/aaron/zookeeper-3.2.2/bin/../conf/zoo.cfg
Starting zookeeper ...
STARTED
如果想要关闭,输入:
[admin@hadoop1 zookeeper-3.2.2]$ sh bin/zkServer.sh stop
JMX enabled by default
Using config: /home/admin/aaron/zookeeper-3.2.2/bin/../conf/zoo.cfg
Stopping zookeeper ...
STOPPED
多机环境运行ZooKeeper
单机环境适合于开发与调试,但是正真应用在生产环境,我们还需要使用可以容错的多机环境。
1 我们在3台机器(hadoop1,hadoop2,hadoop3)上分别下载并解压。
2 在conf目录下创建一个配置文件zoo.cfg,然后指定其中的内容为:
tickTime=2000
dataDir=/home/admin/aaron/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
3 创建/home/admin/aaron/data文件夹(如果之前有数据,请先清空),用于存放ZooKeeper的同步数据。
4 在/home/admin/aaron/data文件夹中创建myid文件,hadoop1机器的内容为:1,hadoop2机器的内容为:2,hadoop3机器的内容为:3
5 分别在3台机器上启动ZooKeeper的Server:sh bin/zkServer.sh start
这样,我们的多机环境的ZooKeeper就启动起来了。现象是和单机一致的。
连接ZooKeeper Server
ZooKeeper的Server集群启动起来以后,我们就可以利用ZooKeeper的Client连接Server了。
我们在hadoop1机器上连接ZooKeeper集群:sh bin/zkCli.sh -server hadoop1:2181
成功后,出现如下的对话框
[zk: hadoop1:2181(CONNECTED) 0]
我们就可以再这里输入命令了。
显示所有的可以使用的命令:
[zk: hadoop1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
connect host:port
get path [watch]
ls path [watch]
set path data [version]
delquota [-n|-b] path
quit
printwatches on|off
create [-s] [-e] path data acl
stat path [watch]
close
history
listquota path
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path
显示当前的数据:
[zk: hadoop1:2181(CONNECTED) 2] ls /
[zookeeper]
然后,我们添加一个新的数据
[zk: hadoop1:2181(CONNECTED) 4] create /alibaba gpcuster
Created /alibaba
再查看数据:
[zk: hadoop1:2181(CONNECTED) 5] ls /
[alibaba, zookeeper]
现在,就多了一个数据节点alibaba。
查看这个节点的值:
[zk: hadoop1:2181(CONNECTED) 6] get /alibaba
gpcuster
cZxid = 4294967298
ctime = Fri Jan 15 13:42:05 CST 2010
mZxid = 4294967298
mtime = Fri Jan 15 13:42:05 CST 2010
pZxid = 4294967298
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 8
numChildren = 0
还有其他的命令,比如修改,删除等等。
More
我们现在只是搭建起来的Zookeeper的环境,以及通过命令行的方式操作。
接下来的我们会继续看看ZooKeeper是如何工作的,如何通过编程的方式来操作,以及如何在实际的应用中使用ZooKeeper。