1. 程式人生 > >ZooKeeper系列(三)—— Zookeeper 常用 Shell 命令

ZooKeeper系列(三)—— Zookeeper 常用 Shell 命令

一、節點增刪改查

1.1 啟動服務和連線服務

# 啟動服務
bin/zkServer.sh start

#連線服務 不指定服務地址則預設連線到localhost:2181
zkCli.sh -server hadoop001:2181

1.2 help命令

使用 help 可以檢視所有命令及格式。

1.3 檢視節點列表

檢視節點列表有 ls pathls2 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

1.4 新增節點

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

建立節點並寫入資料:

create /hadoop 123456

建立有序節點,此時建立的節點名為指定節點名 + 自增序號:

[zk: localhost:2181(CONNECTED) 23] create -s /a  "aaa"
Created /a0000000022
[zk: localhost:2181(CONNECTED) 24] create -s /b  "bbb"
Created /b0000000023
[zk: localhost:2181(CONNECTED) 25] create -s /c  "ccc"
Created /c0000000024

建立臨時節點,臨時節點會在會話過期後被刪除:

[zk: localhost:2181(CONNECTED) 26] create -e /tmp  "tmp"
Created /tmp

1.5 檢視節點

1. 獲取節點資料

# 格式
get path [watch] 
[zk: localhost:2181(CONNECTED) 31] get /hadoop
123456   #節點資料
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14b
mtime = Fri May 24 17:03:06 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

節點各個屬性如下表。其中一個重要的概念是 Zxid(ZooKeeper Transaction Id),ZooKeeper 節點的每一次更改都具有唯一的 Zxid,如果 Zxid1 小於 Zxid2,則 Zxid1 的更改發生在 Zxid2 更改之前。

狀態屬性 說明
cZxid 資料節點建立時的事務 ID
ctime 資料節點建立時的時間
mZxid 資料節點最後一次更新時的事務 ID
mtime 資料節點最後一次更新時的時間
pZxid 資料節點的子節點最後一次被修改時的事務 ID
cversion 子節點的更改次數
dataVersion 節點資料的更改次數
aclVersion 節點的 ACL 的更改次數
ephemeralOwner 如果節點是臨時節點,則表示建立該節點的會話的 SessionID;如果節點是持久節點,則該屬性值為 0
dataLength 資料內容的長度
numChildren 資料節點當前的子節點個數

2. 檢視節點狀態

可以使用 stat 命令檢視節點狀態,它的返回值和 get 命令類似,但不會返回節點資料。

[zk: localhost:2181(CONNECTED) 32] stat /hadoop
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14b
mtime = Fri May 24 17:03:06 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

1.6 更新節點

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

[zk: localhost:2181(CONNECTED) 33] set /hadoop 345
cZxid = 0x14b
ctime = Fri May 24 17:03:06 CST 2019
mZxid = 0x14c
mtime = Fri May 24 17:13:05 CST 2019
pZxid = 0x14b
cversion = 0
dataVersion = 1  # 注意更改後此時版本號為 1,預設建立時為 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

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

[zk: localhost:2181(CONNECTED) 34] set /hadoop 678 0
version No is not valid : /hadoop    #無效的版本號

1.7 刪除節點

刪除節點的語法如下:

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]

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

二、監聽器

2.1 get path [watch]

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

[zk: localhost:2181(CONNECTED) 4] get /hadoop  watch
[zk: localhost:2181(CONNECTED) 5] set /hadoop 45678
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop  #節點值改變

2.2 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  #節點值改變

2.3 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

三、 zookeeper 四字命令

命令 功能描述
conf 列印服務配置的詳細資訊。
cons 列出連線到此伺服器的所有客戶端的完整連線/會話詳細資訊。包括接收/傳送的資料包數量,會話 ID,操作延遲,上次執行的操作等資訊。
dump 列出未完成的會話和臨時節點。這隻適用於 Leader 節點。
envi 列印服務環境的詳細資訊。
ruok 測試服務是否處於正確狀態。如果正確則返回“imok”,否則不做任何相應。
stat 列出伺服器和連線客戶端的簡要詳細資訊。
wchs 列出所有 watch 的簡單資訊。
wchc 按會話列出伺服器 watch 的詳細資訊。
wchp 按路徑列出伺服器 watch 的詳細資訊。

更多四字命令可以參閱官方文件:https://zookeeper.apache.org/doc/current/zookeeperAdmin.html

使用前需要使用 yum install nc 安裝 nc 命令,使用示例如下:

[root@hadoop001 bin]# echo stat | nc localhost 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, 
built on 06/29/2018 04:05 GMT
Clients:
 /0:0:0:0:0:0:0:1:50584[1](queued=0,recved=371,sent=371)
 /0:0:0:0:0:0:0:1:50656[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/19
Received: 372
Sent: 371
Connections: 2
Outstanding: 0
Zxid: 0x150
Mode: standalone
Node count: 167

更多大資料系列文章可以參見 GitHub 開源專案: 大資料入門指南