Zookeeper CLI

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。