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

  • 2019 年 10 月 3 日
  • 筆記

一、節點增刪改查

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 lsls2 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 開源項目大數據入門指南