2021年大数据ZooKeeper(四):ZooKeeper的shell操作
目錄
ZooKeeper的shell操作
客戶端連接
shell基本操作
操作命令
操作實例
節點屬性
???????ZooKeeper?Watcher(監聽機制)
???????Watch機制特點
???????通知狀態和事件類型
???????Shell 客戶端設置watcher
ZooKeeper的shell操作
客戶端連接
運行?zkCli.sh?–server?ip???進入命令行工具。
bin/zkCli.sh ?-server node1:2181
shell基本操作
操作命令
| 命令 | 說明 | 參數 |
| create [-s] [-e] path data acl | 創建Znode | -s 指定是順序節點<br>-e 指定是臨時節點 |
| ls path [watch] | 列出Path下所有子Znode | |
| get path [watch] | 獲取Path對應的Znode的數據和屬性 | |
| ls2 path [watch] | 查看Path下所有子Znode以及子Znode的屬性 | |
| set path data [version] | 更新節點 | version 數據版本 |
| delete path [version] | 刪除節點, 如果要刪除的節點有子Znode則無法刪除 | version 數據版本 |
| rmr path | 刪除節點, 如果有子Znode則遞歸刪除 | |
| setquota -n|-b val path | 修改Znode配額 | -n 設置子節點最大個數<br>-b 設置節點數據最大長度 |
| history | 列出歷史記錄 |
???????操作實例
1:創建普通節點
?create /app1 hello
2: 創建順序節點
create -s /app2 world
3:創建臨時節點
create -e /tempnode world
4:創建順序的臨時節點
create -s -e /tempnode2 aaa
5:獲取節點數據
get ?/app1
6:修改節點數據
set /app1 ?hadoop
7:刪除節點
??delete ?/app1 刪除的節點不能有子節點
??rmr ???/app1 遞歸刪除
???????節點屬性
每個znode都包含了一系列的屬性,通過命令get,可以獲得節點的屬性。
dataVersion:數據版本號,每次對節點進行set操作,dataVersion的值都會增加1(即使設置的是相同的數據),可有效避免了數據更新時出現的先后順序問題。
cversion :子節點的版本號。當znode的子節點有變化時,cversion 的值就會增加1。
cZxid :Znode創建的事務id。
mZxid :Znode被修改的事務id,即每次對znode的修改都會更新mZxid。
對于zk來說,每次的變化都會產生一個唯一的事務id,zxid(ZooKeeper Transaction Id)。通過zxid,可以確定更新操作的先后順序。例如,如果zxid1小于zxid2,說明zxid1操作先于zxid2發生,zxid對于整個zk都是唯一的,即使操作的是不同的znode。
ctime:節點創建時的時間戳.
mtime:節點最新一次更新發生時的時間戳.
ephemeralOwner:如果該節點為臨時節點, ephemeralOwner值表示與該節點綁定的session id. 如果不是, ephemeralOwner值為0.
在client和server通信之前,首先需要建立連接,該連接稱為session。連接建立后,如果發生連接超時、授權失敗,或者顯式關閉連接,連接便處于CLOSED狀態, 此時session結束。
???????ZooKeeper?Watcher(監聽機制)
ZooKeeper提供了分布式數據發布/訂閱功能,一個典型的發布/訂閱模型系統定義了一種一對多的訂閱關系,能讓多個訂閱者同時監聽某一個主題對象,當這個主題對象自身狀態變化時,會通知所有訂閱者,使他們能夠做出相應的處理。
ZooKeeper中,引入了Watcher機制來實現這種分布式的通知功能。ZooKeeper允許客戶端向服務端注冊一個Watcher監聽,當服務端的一些事件觸發了這個Watcher,那么就會向指定客戶端發送一個事件通知來實現分布式的通知功能。
觸發事件種類很多,如:節點創建,節點刪除,節點改變,子節點改變等。
總的來說可以概括Watcher為以下三個過程:客戶端向服務端注冊Watcher、服務端事件發生觸發Watcher、客戶端回調Watcher得到觸發事件情況
???????Watch機制特點
一次性觸發?
事件發生觸發監聽,一個watcher event就會被發送到設置監聽的客戶端,這種效果是一次性的,后續再次發生同樣的事件,不會再次觸發。
事件封裝
ZooKeeper使用WatchedEvent對象來封裝服務端事件并傳遞。
WatchedEvent包含了每一個事件的三個基本屬性:
通知狀態(keeperState),事件類型(EventType)和節點路徑(path)
event異步發送 ?
watcher的通知事件從服務端發送到客戶端是異步的。
先注冊再觸發
Zookeeper中的watch機制,必須客戶端先去服務端注冊監聽,這樣事件發送才會觸發監聽,通知給客戶端。
???????通知狀態和事件類型
同一個事件類型在不同的通知狀態中代表的含義有所不同,下表列舉了常見的通知狀態和事件類型。
事件封裝: Watcher?得到的事件是被封裝過的, 包括三個內容 keeperState, eventType, path
| KeeperState | EventType | 觸發條件 | 說明 |
| None | 連接成功 | ||
| SyncConnected | NodeCreated | Znode被創建 | 此時處于連接狀態 |
| SyncConnected | NodeDeleted | Znode被刪除 | 此時處于連接狀態 |
| SyncConnected | NodeDataChanged | Znode數據被改變 | 此時處于連接狀態 |
| SyncConnected | NodeChildChanged | Znode的子Znode數據被改變 | 此時處于連接狀態 |
| Disconnected | None | 客戶端和服務端斷開連接 | 此時客戶端和服務器處于斷開連接狀態 |
| Expired | None | 會話超時 | 會收到一個SessionExpiredExceptio |
| AuthFailed | None | 權限驗證失敗 | 會收到一個AuthFailedException |
其中連接狀態事件(type=None, path=null)不需要客戶端注冊,客戶端只要有需要直接處理就行了。
???????Shell 客戶端設置watcher
設置節點數據變動監聽:
通過另一個客戶端更改節點數據:
此時設置監聽的節點收到通知:
總結
以上是生活随笔為你收集整理的2021年大数据ZooKeeper(四):ZooKeeper的shell操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据ZooKeeper(三)
- 下一篇: 2021年大数据ZooKeeper(五)