Zookeeper常用節點命令


1 新增節點

create [-s] [-e] path data #其中-s 為有序節點,-e 臨時節點

創建持久化節點並寫入數據:

[zk: localhost:2181(CONNECTED) 0] create /hadoop "123456"
Created /hadoop
[zk: localhost:2181(CONNECTED) 1] get /hadoop
123456
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0x2
mtime = Sat Apr 11 19:15:47 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

 退出客戶端在查看,是否能查到:

[zk: localhost:2181(CONNECTED) 3] quit
Quitting...
2020-04-11 19:29:52,410 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x17168d                                                                       c8c420000 closed
2020-04-11 19:29:52,412 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread                                                                       @519] - EventThread shut down for session: 0x17168dc8c420000
[root@iZ1la3d1xbmukrZ bin]# ./zkCli.sh
Connecting to localhost:2181
2020-04-11 19:29:54,955 [myid:] - INFO  [main:Environment@100] - Client environm                                                                       ent:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on                                                                        03/23/2017 10:13 GMT
2020-04-11 19:29:54,958 [myid:] - INFO  [main:Environment@100] - Client environm                                                                       ent:host.name=iZ1la3d1xbmukrZ
2020-04-11 19:29:54,958 [myid:] - INFO  [main:Environment@100] - Client environm                                                                       ent:java.version=1.8.0_131
2020-04-11 19:29:54,960 [myid:] - INFO  [main:Environment@100] - Client environm                                                                       ent:java.vendor=Oracle Corporation
2020-04-11 19:29:54,961 [myid:] - INFO  [main:Environment@100] - Client environm                                                                       ent:java.home=/home/zookeeper/jdk1.8.0_131/jre
2020-04-11 19:29:54,961 [myid:] - INFO  [main:Environment@100] - Client environm 
[zk: localhost:2181(CONNECTED) 0] get /hadoop
123456
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0x2
mtime = Sat Apr 11 19:15:47 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

創建持久化有序節點,此時創建的節點名為指定節點名 + 自增序號:

[zk: localhost:2181(CONNECTED) 1] create -s /a "a"
Created /a0000000001
[zk: localhost:2181(CONNECTED) 2] get /a0000000001
a
cZxid = 0x5
ctime = Sat Apr 11 19:35:03 CST 2020
mZxid = 0x5
mtime = Sat Apr 11 19:35:03 CST 2020
pZxid = 0x5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] create -s /b "b"
Created /b0000000002

 創建臨時節點,臨時節點會在會話過期后被刪除:

Created /b0000000002
[zk: localhost:2181(CONNECTED) 4] create -e /tmp "tmp"
Created /tmp
[zk: localhost:2181(CONNECTED) 5] quit
Quitting...
2020-04-11 20:25:24,342 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x17168dc8c420001 closed
2020-04-11 20:25:24,344 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x17168dc8c420001
[root@iZ1la3d1xbmukrZ bin]# ./zkCli.sh
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] get /tmp
Node does not exist: /tmp
[zk: localhost:2181(CONNECTED) 1]

創建臨時有序節點,臨時節點會在會話過期后被刪除:

[zk: localhost:2181(CONNECTED) 2] create -s -e /aa 'aaa'
Created /aa0000000004
[zk: localhost:2181(CONNECTED) 3] create -s -e /bb 'nnn'
Created /bb0000000005
[zk: localhost:2181(CONNECTED) 4]

2 更新節點
更新節點的命令是 set ,可以直接進行修改,如下:

[zk: localhost:2181(CONNECTED) 4] get /hadoop
123456
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0x2
mtime = Sat Apr 11 19:15:47 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: localhost:2181(CONNECTED) 5] set /hadoop "3456"
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0xc
mtime = Sat Apr 11 20:27:51 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] get /hadoop
3456
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0xc
mtime = Sat Apr 11 20:27:51 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 7]

可以基於版本號進行更改,此時類似於樂觀鎖機制,當你傳入的數據版本號(dataVersion) 和當前節點的數據版本號不符合時,zookeeper 會拒絕本次修改:

[zk: localhost:2181(CONNECTED) 7] set /hadoop "345" 1
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0xd
mtime = Sat Apr 11 20:29:15 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 8] set /hadoop "345" 3
version No is not valid : /hadoop
[zk: localhost:2181(CONNECTED) 9]

3 刪除節點
​ 刪除節點的語法如下:

delete path [version]

和更新節點數據一樣,也可以傳入版本號,當你傳入的數據版本號 (dataVersion),當前節點的數據版本號不符合時,zookeeper 不會執行刪除操作。

[zk: localhost:2181(CONNECTED) 9] delete /hadoop 3
version No is not valid : /hadoop
[zk: localhost:2181(CONNECTED) 10] delete /hadoop 2
[zk: localhost:2181(CONNECTED) 11] get /hadoop
Node does not exist: /hadoop
[zk: localhost:2181(CONNECTED) 12]

要想刪除某個節點及其所有后代節點,可以使用遞歸刪除,命令為 rmr

[zk: localhost:2181(CONNECTED) 2] create /tmp "123"
Created /tmp
[zk: localhost:2181(CONNECTED) 3] create /tmp/wgr "123"
Created /tmp/wgr
[zk: localhost:2181(CONNECTED) 4] create /tmp/wgr/qwer "123"
Created /tmp/wgr/qwer
[zk: localhost:2181(CONNECTED) 5] create /tmp/wgr/qwer/re "123"
Created /tmp/wgr/qwer/re
[zk: localhost:2181(CONNECTED) 6] delete /tmp
Node not empty: /tmp
[zk: localhost:2181(CONNECTED) 7] get /tmp
123
cZxid = 0x15
ctime = Sat Apr 11 20:32:16 CST 2020
mZxid = 0x15
mtime = Sat Apr 11 20:32:16 CST 2020
pZxid = 0x16
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: localhost:2181(CONNECTED) 8]
[zk: localhost:2181(CONNECTED) 8] rmr /tmp
[zk: localhost:2181(CONNECTED) 9] get /tmp
Node does not exist: /tmp
[zk: localhost:2181(CONNECTED) 10]

查看節點

get path

[zk: localhost:2181(CONNECTED) 6] get /hadoop
3456
cZxid = 0x2
ctime = Sat Apr 11 19:15:47 CST 2020
mZxid = 0xc
mtime = Sat Apr 11 20:27:51 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
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 數據節點當前的子節點個數

當創建子節點的時候,pZxid會發生改變

查看節點狀態
可以使用 stat 命令查看節點狀態, 它的返回值和 get 命令類似, 但不會返回節點數據 

[zk: localhost:2181(CONNECTED) 11] stat /hadoop
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x1e
mtime = Sat Apr 11 20:39:10 CST 2020
pZxid = 0x1e
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 12]

查看節點列表
​ 查看節點列表有 ls path 和 ls2 path 兩個命令,后者是前者的增強,不僅可以查看指定路徑下的所有節點,還可以查看當前節點的信息

[zk: localhost:2181(CONNECTED) 12] ls /
[b0000000002, a0000000001, hadoop, zookeeper, tmp0000000006]
[zk: localhost:2181(CONNECTED) 13] ls2 /
[b0000000002, a0000000001, hadoop, zookeeper, tmp0000000006]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x1e
cversion = 13
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 5
[zk: localhost:2181(CONNECTED) 14]

4  監聽器

get path [watch]
​ 使用 get path [watch] 注冊的監聽器能夠在節點內容發生改變的時候,向客戶端發出通知。需要注意的是 zookeeper 的觸發器是一次性的 (One-time trigger),即觸發一次后就會立即失效。

[zk: localhost:2181(CONNECTED) 18] get /hadoop watch
456
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x1f
mtime = Sat Apr 11 20:46:15 CST 2020
pZxid = 0x20
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: localhost:2181(CONNECTED) 19] set /hadoop 45678

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x21
mtime = Sat Apr 11 20:53:32 CST 2020
pZxid = 0x20
cversion = 1
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1
[zk: localhost:2181(CONNECTED) 20] set /hadoop 43
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x22
mtime = Sat Apr 11 20:53:46 CST 2020
pZxid = 0x20
cversion = 1
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 1
[zk: localhost:2181(CONNECTED) 21]

監聽器stat path [watch]
​ 使用 stat path [watch] 注冊的監聽器能夠在節點狀態發生改變的時候,向客戶端發出通知

[zk: localhost:2181(CONNECTED) 0] stat /hadoop watch
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x22
mtime = Sat Apr 11 20:53:46 CST 2020
pZxid = 0x20
cversion = 1
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 1
[zk: localhost:2181(CONNECTED) 1] set /hadoop 112233

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop
cZxid = 0x1e
ctime = Sat Apr 11 20:39:10 CST 2020
mZxid = 0x26
mtime = Sat Apr 11 20:56:48 CST 2020
pZxid = 0x20
cversion = 1
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 1

監聽器ls\ls2 path [watch]
​ 使用 ls path [watch] 或 ls2 path [watch] 注冊的監聽器能夠監聽該節點下所有子節點的增加和刪除操作。

[zk: localhost:2181(CONNECTED) 3] ls /hadoop watch
[hbase]
[zk: localhost:2181(CONNECTED) 4] create /hadoop/node3 "node3"

WATCHER::
Created /hadoop/node3

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop
[zk: localhost:2181(CONNECTED) 5] ls /hadoop watch
[node3, hbase]
[zk: localhost:2181(CONNECTED) 6] delete /hadoop/node3

WATCHER::
[zk: localhost:2181(CONNECTED) 7]
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop

[zk: localhost:2181(CONNECTED) 7]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM