标签:image 概念 tab 数据 EDA style 内容 dmi 时间
#其中-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 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
[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] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。需要注意的是 zookeeper 的触发器是一次性的 (One-time trigger),即触发一次后就会立即失效。
使用 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 #节点值改变
[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
标签:image 概念 tab 数据 EDA style 内容 dmi 时间
原文地址:https://www.cnblogs.com/jdy1022/p/14310479.html