ZooKeeper 命令行介面(CLI)是用來與 ZooKeeper 集成作開發進行交互的。這是在調試和使用不同的選項時的工作有用。
為了執行ZooKeeper的CLI操作, ZooKeeper伺服器首先要啟動 (“bin/zkServer.sh start”) , 然後使用 ZooKeeper 客戶端 (“bin/zkCli.sh”). 當客戶端啟動後,可以執行以下操作 -
- 創建znodes
- 獲取數據
- 監視 znode 變化
- 設置數據
- 創建 znode 的子 znode
- 列出一個 znode 的子 znode
- 檢查狀態
- 刪除一個 znode
現在,讓我們一個個用一個例子地來看上面的命令。
創建Znodes
由一個給定的路徑來創建znode。flag參數指定了創建的 znode 是否為短暫的,持久的,或連續的。默認情況下,所有的 znodes是持久的。
-
短暫 znodes(flag: e)當會話過期或當客戶端斷開連接將被自動刪除。
-
連續 znodes 保證 znode 路徑是唯一的。
-
ZooKeeper集成將沿著添加序列號使用10位填充到znode路徑。例如,znode路徑 /myapp 將被轉換為 /myapp0000000001 以及下一個序列號將是 /myapp0000000002. 如果沒有指定flag,那麼 znode 是持久的。
語法
create /path /data
示例
create /FirstZnode “Myfirstzookeeper-app”
輸出結果
[zk: localhost:2181(CONNECTED) 0] create /FirstZnode “Myfirstzookeeper-app” Created /FirstZnode
要創建一個連續znode,如下圖所示添加 -s 標誌。
語法
create -s /path /data
示例
create -s /FirstZnode second-data
輸出
[zk: localhost:2181(CONNECTED) 2] create -s /FirstZnode “second-data” Created /FirstZnode0000000023
要創建一個臨時Znode,添加-e標誌,如下圖所示。
語法
create -e /path /data
示例
create -e /SecondZnode “Ephemeral-data”
輸出
[zk: localhost:2181(CONNECTED) 2] create -e /SecondZnode “Ephemeral-data” Created /SecondZnode
記住,當丟失一個客戶端連接,在臨時 znode 將被刪除。可以通過退出 ZooKeeper CLI 嘗試,然後重新打開命令行。
獲取數據
它返回 znode 的相關數據和指定 znode 元數據。這裏將得到資訊,例如當數據最後一次修改,在那裏它被修改和有關數據的資訊。此外 CLI 還用於分配監視顯示通知有關的數據。
語法
get /path
示例
get /FirstZnode
輸出
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode “Myfirstzookeeper-app” cZxid = 0x7f ctime = Tue Sep 29 16:15:47 IST 2015 mZxid = 0x7f mtime = Tue Sep 29 16:15:47 IST 2015 pZxid = 0x7f cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 22 numChildren = 0
要訪問順序znode,必須輸入znode的完整路徑。
示例
get /FirstZnode0000000023
輸出
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode0000000023 “Second-data” cZxid = 0x80 ctime = Tue Sep 29 16:25:47 IST 2015 mZxid = 0x80 mtime = Tue Sep 29 16:25:47 IST 2015 pZxid = 0x80 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 0
監視
監視顯示通知當指定znode或znode的子數據變化。只能在 get 命令中設置監視。
語法
get /path [watch] 1
示例
get /FirstZnode 1
輸出
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode 1 “Myfirstzookeeper-app” cZxid = 0x7f ctime = Tue Sep 29 16:15:47 IST 2015 mZxid = 0x7f mtime = Tue Sep 29 16:15:47 IST 2015 pZxid = 0x7f cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 22 numChildren = 0
輸出類似於正常get命令,但它會在後臺等待節點改變。
設置數據
設置指定znode的數據。當你完成設置操作,就可以使用get CLI命令檢查數據。
語法
set /path /data
示例
set /SecondZnode Data-updated
輸出
[zk: localhost:2181(CONNECTED) 1] get /SecondZnode “Data-updated” cZxid = 0x82 ctime = Tue Sep 29 16:29:50 IST 2015 mZxid = 0x83 mtime = Tue Sep 29 16:29:50 IST 2015 pZxid = 0x82 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x15018b47db00000 dataLength = 14 numChildren = 0
如果分配監視選項在get命令(之前的命令),則輸出將類似如下 -
輸出
[zk: localhost:2181(CONNECTED) 1] get /FirstZnode “Mysecondzookeeper-app” WATCHER: : WatchedEvent state:SyncConnected type:NodeDataChanged path:/FirstZnode cZxid = 0x7f ctime = Tue Sep 29 16:15:47 IST 2015 mZxid = 0x84 mtime = Tue Sep 29 17:14:47 IST 2015 pZxid = 0x7f cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 23 numChildren = 0
創建子znode
創建子znode類似於創建新的znodes。唯一的區別在於,子 znode 的路徑將包含有父路徑。
語法
create /parent/path/subnode/path /data
示例
create /FirstZnode/Child1 firstchildren
輸出
[zk: localhost:2181(CONNECTED) 16] create /FirstZnode/Child1 “firstchildren” created /FirstZnode/Child1 [zk: localhost:2181(CONNECTED) 17] create /FirstZnode/Child2 “secondchildren” created /FirstZnode/Child2
列出子znode
該命令用於列出和顯示子 znode 。
語法
ls /path
示例
ls /MyFirstZnode
輸出
[zk: localhost:2181(CONNECTED) 2] ls /MyFirstZnode [mysecondsubnode, myfirstsubnode]
檢查狀態
狀態描述了指定znode的元數據。它包含詳細資訊,如時間戳,版本號,訪問控制列表,數據長度和子znode。
語法
stat /path
示例
stat /FirstZnode
輸出
[zk: localhost:2181(CONNECTED) 1] stat /FirstZnode cZxid = 0x7f ctime = Tue Sep 29 16:15:47 IST 2015 mZxid = 0x7f mtime = Tue Sep 29 17:14:24 IST 2015 pZxid = 0x7f cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 23 numChildren = 0
刪除Znode
刪除指定znode和遞歸刪除所有的子znode。這只有在znode可用時發生。
語法
rmr /path
示例
rmr /FirstZnode
輸出
[zk: localhost:2181(CONNECTED) 10] rmr /FirstZnode [zk: localhost:2181(CONNECTED) 11] get /FirstZnode Node does not exist: /FirstZnode
刪除(刪除/路徑)命令類似remove命令,但它僅適用於無子znode的znode。