三、zookeeper常用shell命令
时间:2022-04-03 16:28
一、新增节点
- 语法
#其中-s 为有序节点,-e 临时节点 create [-s] [-e] path data
创建持久化节点并写入数据:
# 创建hadoop节点并写入数据123456: create /hadoop "123456"
创建持久化有序节点,此时创建的节点名为指定节点名 + 自增序号
[zk: localhost:2181(CONNECTED) 2] create -s /a "aaa" Created /a0000000000 [zk: localhost:2181(CONNECTED) 3] create -s /b "bbb" Created /b0000000001 [zk: localhost:2181(CONNECTED) 4] create -s /c "ccc" Created /c0000000002
创建临时节点,临时节点会在会话过期后被删除:
[zk: localhost:2181(CONNECTED) 5] create -e /tmp "tmp" Created /tmp
创建临时有序节点,临时节点会在会话过期后被删除:
[zk: localhost:2181(CONNECTED) 6] create -s -e /aa ‘aaa‘ Created /aa0000000004 [zk: localhost:2181(CONNECTED) 7] create -s -e /bb ‘bbb‘ Created /bb0000000005 [zk: localhost:2181(CONNECTED) 8] create -s -e /cc ‘ccc‘ Created /cc0000000006
二、更新节点
更新节点的命令是 set
,可以直接进行修改,如下:
- 语法
set path data [version]
[zk: localhost:2181(CONNECTED) 3] set /hadoop "345" cZxid = 0x4 ctime = Thu Dec 12 14:55:53 CST 2019 mZxid = 0x5 mtime = Thu Dec 12 15:01:59 CST 2019 pZxid = 0x4 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0
也可以基于版本号进行更改,此时类似于乐观锁机制,当你传入的数据版本号(dataVersion) 和当前节点的数据版本号不符合时,zookeeper 会拒绝本次修改:
[zk: localhost:2181(CONNECTED) 10] set /hadoop "3456" 1 version No is not valid : /hadoop
三、删除节点
删除节点的语法如下:
delete path [version]
和更新节点数据一样,也可以传入版本号,当你传入的数据版本号 (dataVersion)和当前节点的数据版本号不符合时,zookeeper 不会执行删除操作。
[zk: localhost:2181(CONNECTED) 36] delete /hadoop 0 version No is not valid : /hadoop #无效的版本号 [zk: localhost:2181(CONNECTED) 37] delete /hadoop 1 [zk: localhost:2181(CONNECTED) 38]
当某个节点有子节点时delete,不能删除该节点,要想删除某个节点及其所有后代节点,可以使用递归删除,命令为 rmr path 。
四、查看节点
- 语法
get path
[zk: localhost:2181(CONNECTED) 1] get /hadoop 123456 cZxid = 0x4 ctime = Thu Dec 12 14:55:53 CST 2019 mZxid = 0x4 mtime = Thu Dec 12 14:55:53 CST 2019 pZxid = 0x4 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
节点各个属性如下表。其中一个重要的概念是 Zxid(ZooKeeper TransactionId),ZooKeeper 节点的每一次更改都具有唯一的 Zxid,如果 Zxid1 小于 Zxid2,则Zxid1 的更改发生在 Zxid2 更改之前。
状态属性 | 说明 |
---|---|
cZxid | 数据节点创建时的事务 ID |
ctime | 数据节点创建时的时间 |
mZxid | 数据节点最后一次更新时的事务 ID |
mtime | 数据节点最后一次更新时的时间 |
pZxid | 数据节点的子节点最后一次被修改时的事务 ID |
cversion | 子节点的更改次数 |
dataVersion | 节点数据的更改次数 |
aclVersion | 节点的 ACL 的更改次数 |
ephemeralOwner | 如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为 0 |
dataLength | 数据内容的长度 |
numChildren | 数据节点当前的子节点个数 |
五、查看节点状态
可以使用 stat
命令查看节点状态,它的返回值和 get 命令类似,但不会返回节点数据。
- 语法
stat path
[zk: localhost:2181(CONNECTED) 2] stat /hadoop cZxid = 0x4 ctime = Thu Dec 12 14:55:53 CST 2019 mZxid = 0x4 mtime = Thu Dec 12 14:55:53 CST 2019 pZxid = 0x4 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0
六、查看节点列表
查看节点列表有 ls path 和 ls2 path 两个命令,后者是前者的增强,不仅可以查看指定路径下的所有节点,还可以查看当前节点的信息。
[zk: localhost:2181(CONNECTED) 0] ls / [cluster, controller_epoch, brokers, storm, zookeeper, admin, ...] [zk: localhost:2181(CONNECTED) 1] ls2 / [cluster, controller_epoch, brokers, storm, zookeeper, admin, ....] cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x0 mtime = Thu Jan 01 08:00:00 CST 1970 pZxid = 0x130 cversion = 19 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 11
七、监听器get path [watch]
使用 get path [watch] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。需要注意的是 zookeeper 的触发器是一次性的 (One-time trigger),即触发一次后就会立即失效。
八、监听器stat path [watch]
使用 stat path [watch] 注册的监听器能够在节点状态发生改变的时候,向客户端发出通知
[zk: localhost:2181(CONNECTED) 7] stat /hadoop watch [zk: localhost:2181(CONNECTED) 8] set /hadoop 112233 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop #节点值改变
九、监听器ls\ls2 path [watch]
使用 ls path [watch] 或 ls2 path [watch] 注册的监听器能够监听该节点下所有子节点的增加和删除操作。
[zk: localhost:2181(CONNECTED) 9] ls /hadoop watch [] [zk: localhost:2181(CONNECTED) 10] create /hadoop/yarn "aaa" WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop