Zookeeper客户端常用命令

Zookeeper 客户端常用的 shell 命令

Zookeeper 客户端常用的 shell 命令

概览

命令基本语法功能描述
help显示所有操作命令
ls path使用 ls 命令来查看当前 znode 的子节点 [可监听] -w 监听子节点变化 -s 附加次级信息
create普通创建 -s 含有序列 -e 临时(重启或者超时消失)
get path获得节点的值 [可监听] -w 监听节点内容变化 -s 附加次级信息
set设置节点的具体值
stat查看节点状态
delete删除节点
deleteall递归删除节点

节点的增删改查

连接服务端

不加 -server 就默认连接 localhost

-server 后跟 Zookeeper 服务端的 ip 和端口

1
bin/zkCli.sh -server hadoop102:2181

创建节点

1
2
3
create 普通创建 
-s 含有序列
-e 临时(重启或者超时消失)
1
2
3
4
5
6
7
8
# 普通创建:在根节点下创建一个 houge 节点
create /houge
# 含有序列:会自动在 shuaige 后面拼上序列号
create -s /shuaige
# 临时节点:这个 hehe 节点在客户端断开连接时候会消失
create -e /hehe
# 创建一个带值的结点
create /qie hehe

查看节点列表

1
2
3
ls path 使用 ls 命令来查看当前 znode 的子节点 
[可监听] -w 监听子节点变化
-s 附加次级信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[zk: hadoop102:2181(CONNECTED) 10] ls /
[hehe, houge, qie, shuaige0000000006, zookeeper]
# 附加次级信息
[zk: hadoop102:2181(CONNECTED) 26] ls -s /
[hehe, houge, shuaige0000000006, zookeeper]cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x200000012
cversion = 14
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4

获取节点的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[zk: hadoop102:2181(CONNECTED) 11] get /qie
hehe
# 加上节点信息
[zk: hadoop102:2181(CONNECTED) 12] get -s /qie
hehe
cZxid = 0x200000015
ctime = Sat May 07 16:34:20 CST 2022
mZxid = 0x200000015
mtime = Sat May 07 16:34:20 CST 2022
pZxid = 0x200000015
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

修改节点的值

1
2
3
[zk: hadoop102:2181(CONNECTED) 13] set /qie xixi
[zk: hadoop102:2181(CONNECTED) 14] get /qie
xixi

删除节点

1
2
3
4
5
[zk: hadoop102:2181(CONNECTED) 15] ls /
[hehe, houge, qie, shuaige0000000006, zookeeper]
[zk: hadoop102:2181(CONNECTED) 16] delete /houge
[zk: hadoop102:2181(CONNECTED) 17] ls /
[hehe, qie, shuaige0000000006, zookeeper]

递归删除,删除一个非空节点时会提示Node not empty

此时使用 deleteall 命令

1
2
3
4
5
6
7
8
9
[zk: hadoop102:2181(CONNECTED) 18] create /qie/ha
Created /qie/ha
[zk: hadoop102:2181(CONNECTED) 19] ls /
[hehe, qie, shuaige0000000006, zookeeper]
[zk: hadoop102:2181(CONNECTED) 20] delete /qie
Node not empty: /qie
[zk: hadoop102:2181(CONNECTED) 21] deleteall /qie
[zk: hadoop102:2181(CONNECTED) 22] ls /
[hehe, shuaige0000000006, zookeeper]

节点信息参数详解

我们加上 -s 参数的话,会显示节点的详情信息,下面是参数解释:

以下面节点为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
[zk: hadoop102:2181(CONNECTED) 23] get -s /shuaige0000000006
null
cZxid = 0x20000000f
ctime = Sat May 07 16:24:03 CST 2022
mZxid = 0x20000000f
mtime = Sat May 07 16:24:03 CST 2022
pZxid = 0x20000000f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0
参数名含义
cZxid创建节点的事务 zxid,每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。
ctime节点创建时间,znode 被创建的毫秒数(从 1970 年开始)
mZxidznode 最后更新的事务 zxid
mtime节点修改时间,znode 最后修改的毫秒数(从 1970 年开始)
pZxidznode 最后更新的子节点 zxid
cversionznode 子节点变化号,znode 子节点修改次数
dataVersionznode 数据变化号
aclVersionznode 访问控制列表的变化号
ephemeralOwner如果是临时节点,这个是 znode 拥有者的 session id。如果不是 临时节点则是 0。
dataLengthznode 的数据长度
numChildrenznode 子节点数量

节点监听

监听节点内容变化

命令:get -w [path]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 先建立一个带值的节点
[zk: hadoop102:2181(CONNECTED) 1] create /houge heihei
Created /houge
[zk: hadoop102:2181(CONNECTED) 2] ls /
[houge, shuaige0000000006, zookeeper]
[zk: hadoop102:2181(CONNECTED) 3] get /houge
heihei
# 开启监听节点内容
[zk: hadoop102:2181(CONNECTED) 4] get -w /houge
heihei
# 另一台机器也登到 zk 集群上,修改这个节点内容
[zk: hadoop103:2181(CONNECTED) 3] get /houge
heihei
[zk: hadoop103:2181(CONNECTED) 4] set /houge xixi
# 102 上显示出了监听内容
[zk: hadoop102:2181(CONNECTED) 5]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/houge

注意:监听生效一次,后续就不会生效了,如果还想监听内容变化,需要再次跑命令监听

监听节点上的路径变化

命令:ls -w [path]

1
2
3
4
5
6
7
8
9
10
11
# 启动监听
[zk: hadoop102:2181(CONNECTED) 6] ls -w /houge
[]
# 另一台机器上对路径做修改
[zk: hadoop103:2181(CONNECTED) 6] create /houge/shuaige
Created /houge/shuaige
# 102 上有相应提示
[zk: hadoop102:2181(CONNECTED) 7]
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/houge

注意:监听生效一次,后续就不会生效了,如果还想监听路径变化,需要再次跑命令监听