使用python操作zookeeper
生活随笔
收集整理的這篇文章主要介紹了
使用python操作zookeeper
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
kazoo 介紹
zookeeper的開發接口以前主要以java和c為主,隨著python項目越來越多的使用zookeeper作為分布式集群實現,python的zookeeper接口也出現了很多,現在主流的純python的zookeeper接口是kazoo。因此如何使用kazoo開發基于python的分布式程序是必須掌握的。
安裝kazoo
pip3 install kazoo基本操作
from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 zk.stop() #與zookeeper斷開創建節點
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 #makepath=True是遞歸創建,如果不加上中間那一段,就是建立一個空的節點 zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True) node = zk.get_children('/') # 查看根節點有多少個子節點 print(node) zk.stop() #與zookeeper斷開執行輸出:
['abc', 'zookeeper']注意:空節點的值不能用set修改,否則執行報錯!
刪除節點
如果要刪除這個/abc/JQK/XYZ/0001的子node,但是想要上一級XYZ這個node還是存在的,語句如下:
from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 #recursive=True是遞歸刪除,就是無視下面的節點是否是空,都干掉,不加上的話,會提示子節點非空,刪除失敗 zk.delete('/abc/JQK/XYZ/0001',recursive=True) node = zk.get_children('/') # 查看根節點有多少個子節點 print(node) zk.stop() #與zookeeper斷開執行輸出:
['abc', 'zookeeper']更改節點
現在假如要在0001這個node里更改value,比如改成:“this is my horse!”,
由于上面節點已經被刪除掉了,需要先創建一次。
語句如下:
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True) zk.set('/abc/JQK/XYZ/0001',b"this is my horse!") node = zk.get('/abc/JQK/XYZ/0001') # 查看值 print(node) zk.stop() #與zookeeper斷開執行輸出:
(b'this is my horse!', ZnodeStat(czxid=4294967449, mzxid=4294967452, ctime=1544598301273, mtime=1544598308267, version=1, cversion=0, aversion=0, ephemeralOwner=0, dataLength=17, numChildren=0, pzxid=4294967449))注意!set這種增加節點內容的方式是覆蓋式增加,并不是在原有基礎上增添。而且添加中文的話可能在ZooInspecter里出現的是亂碼
查看節點
由于所有節點,都是在/ 節點上面的,直接查看根節點,就可以知道所有節點了
from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 node = zk.get_children('/') print(node) zk.stop() #與zookeeper斷開執行輸出:
['abc', 'zookeeper']一鍵清空zookeeper
有些時候,需要將zookeeper的數據全部清空,可以使用以下代碼
from kazoo.client import KazooClient zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就寫127.0.0.1 zk.start() #與zookeeper連接 jiedian = zk.get_children('/') # 查看根節點有多少個子節點 print(jiedian) for i in jiedian:if i != 'zookeeper': # 判斷不等于zookeeperprint(i)# 刪除節點zk.delete('/%s'%i,recursive=True) zk.stop() #與zookeeper斷開注意:默認的zookeeper節點,是不允許刪除的,所以需要做一個判斷。
總結
以上是生活随笔為你收集整理的使用python操作zookeeper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用python操作常用的库-kafka
- 下一篇: python的dir()和__dict_