1.介绍
zookeeper是一个分布式服务框架,用于维护配置信息、命名、提供分布式同步和提供组服务。它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
2.特性
ZK的数据模型:树形结构
ZK每个节点znode,有一个唯一的路径标识
znode类型:PERSISTENT-持久化目录节点、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点、EPHEMERAL-临时目录节点、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点。
注意点:临时znode下面不能有子节点,临时znode会随着客户端的关闭而清除。
每个znode节点有各自的版本号,每个节点数据发生了变化,该节点的版本会增加。
ZK节点存储的数据量不宜过大,几K左右
znode可以设置访问权限
znode可以设置watcher:当节点数据发生变化时,可以通过监视器获取
3.ZK单机部署
下载并解压到服务器上:http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.15.1.tar.gz
配置环境变量
1export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
2export PATH=${ZOOKEEPER_HOME}/bin:$PATH
修改ZK的配置文件,复制zoo_sample.cfg为zoo.cfg。单机的话一般只需要配置dataDir就可以了
1dataDir=/home/hadoop/tmp/zookeeper
4.ZK使用命令
服务端:
1启动ZK
2[hadoop@hadoop001 conf]$ zkServer.sh start
3JMX enabled by default
4Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
5Starting zookeeper ... STARTED
6查看ZK的状态,可以看出是standalone
7[hadoop@hadoop001 conf]$ zkServer.sh status
8JMX enabled by default
9Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
10Mode: standalone
11通过jps查看ZK进程号
12[hadoop@hadoop001 conf]$ jps
134512 SecondaryNameNode
144770 NodeManager
154323 DataNode
1627431 QuorumPeerMain //ZK进程
1727450 Jps
184221 NameNode
194670 ResourceManager
客户端:
使用zkCli.sh可以进入ZK的客户端,连接到ZK服务器
1[hadoop@hadoop001 conf]$ zkCli.sh
2help可以查看使用哪些命令
3[zk: localhost:2181(CONNECTED) 0] help
4ZooKeeper -server host:port cmd args
5 stat path [watch]
6 set path data [version]
7 ls path [watch]
8 delquota [-n|-b] path
9 ls2 path [watch]
10 setAcl path acl
11 setquota -n|-b val path
12 history
13 redo cmdno
14 printwatches on|off
15 delete path [version]
16 sync path
17 listquota path
18 rmr path
19 get path [watch]
20 create [-s] [-e] path data acl
21 addauth scheme auth
22 quit
23 getAcl path
24 close
25 connect host:port
ls path [watch] :列出根节点下所有的子节点信息
1[zk: localhost:2181(CONNECTED) 1] ls /
2[ruoze, zookeeper, ruozedata]
get path [watch] :获取当前节点的数据内容,相同命令为stat path [watch]
1[zk: localhost:2181(CONNECTED) 2] get /
2
3cZxid = 0x0
4ctime = Thu Jan 01 08:00:00 CST 1970
5mZxid = 0x0
6mtime = Thu Jan 01 08:00:00 CST 1970
7pZxid = 0x132
8cversion = 15
9dataVersion = 0
10aclVersion = 0
11ephemeralOwner = 0x0
12dataLength = 0
13numChildren = 3
14
15czxid 创建该节点的事物ID
16
17ctime 创建该节点的时间
18
19mZxid 更新该节点的事物ID
20
21mtime 更新该节点的时间
22
23pZxid 操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点)
24
25cversion 当前节点的子节点版本号
26
27dataVersion 当前节点的数据版本号
28
29aclVersion 当前节点的acl权限版本号
30
31ephemeralowner 当前节点的如果是临时节点,该属性是临时节点的事物ID
32
33dataLength 当前节点的d的数据长度
34
35numchildren 当前节点的子节点个数
ls2命令等于ls+get结合
1[zk: localhost:2181(CONNECTED) 3] ls2 /
2[ruoze, zookeeper, ruozedata]
3cZxid = 0x0
4ctime = Thu Jan 01 08:00:00 CST 1970
5mZxid = 0x0
6mtime = Thu Jan 01 08:00:00 CST 1970
7pZxid = 0x132
8cversion = 15
9dataVersion = 0
10aclVersion = 0
11ephemeralOwner = 0x0
12dataLength = 0
13numChildren = 3
set path data [version] 修改当前节点的数据内容 如果指定版本,需要和当前节点的数据版本一致
1[zk: localhost:2181(CONNECTED) 6] set /ruoze 123
2cZxid = 0x2
3ctime = Mon Sep 02 14:04:23 CST 2019
4mZxid = 0x162
5mtime = Mon Sep 09 14:12:50 CST 2019
6pZxid = 0x157
7cversion = 17
8dataVersion = 6
9aclVersion = 0
10ephemeralOwner = 0x0
11dataLength = 3
12numChildren = 1
create [-s] [-e] path data acl
-s 表示是顺序节点
-e 标识是临时节点
1[zk: localhost:2181(CONNECTED) 1] create -e /ruozedata ruozedata
2Created /ruozedata
3[zk: localhost:2181(CONNECTED) 2] ls /
4[ruoze, zookeeper, ruozedata]
5[zk: localhost:2181(CONNECTED) 7] create -s /ruozeda ruozeda
6Created /ruozeda0000000011
7[zk: localhost:2181(CONNECTED) 10] ls /
8[ruoze, zookeeper, ruozedata, ruozeda0000000011]
delete path [version] 删除指定路径的节点 如果有子节点要先删除子节点
1[zk: localhost:2181(CONNECTED) 11] delete /ruozedata
2[zk: localhost:2181(CONNECTED) 12] ls /
3[ruoze, zookeeper]
rmr path 删除当前路径节点及其所有子节点
1[zk: localhost:2181(CONNECTED) 6] get /ruozeda0000000011
2ruozeda
3cZxid = 0x16d
4ctime = Mon Sep 09 14:16:36 CST 2019
5mZxid = 0x16d
6mtime = Mon Sep 09 14:16:36 CST 2019
7pZxid = 0x175
8cversion = 1
9dataVersion = 0
10aclVersion = 0
11ephemeralOwner = 0x0
12dataLength = 7
13numChildren = 1 //表示有子节点
14[zk: localhost:2181(CONNECTED) 7] rmr /ruozeda0000000011
15[zk: localhost:2181(CONNECTED) 8] ls /
16[ruoze, zookeeper]
识别
下方二
维码
,即可关注公众号获取最新大厂技术