zookeeper怎么利用python進行操作?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

ZooKeeper 是一個分布式的、開放源碼的分布式應用程序協(xié)調(diào)服務,是 Google 的 Chubby 一個開源的實現(xiàn),是 Hadoop 和 Hbase 的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。ZooKeeper 支持大部分開發(fā)語言,除了某些特定的功能只支持 Java 和 C。python 通過 kazoo 可以實現(xiàn)操作 ZooKeeper 。
這個簡單,使用 pip 命令安裝
pip3 install kazoo
可通過 KazooClient 類直接連接 ZooKeeper ,支持多個 host ,端口默認 2181。
import json from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start()
先看下 create() 方法定義
def create(self, path, value=b"", acl=None, ephemeral=False, sequence=False, makepath=False): :param path: Path of node. :param value: Initial bytes value of node. :param acl: :class:`~kazoo.security.ACL` list. :param ephemeral: Boolean indicating whether node is ephemeral (tied to this session). :param sequence: Boolean indicating whether path is suffixed with a unique index. :param makepath: Whether the path should be created if it doesn't exist.
我們來解釋下這些參數(shù):
path: 節(jié)點路徑
value: 節(jié)點對應的值,注意值的類型是 bytes
ephemeral: 若為 True 則創(chuàng)建一個臨時節(jié)點,session 中斷后自動刪除該節(jié)點。默認 False
sequence: 若為 True 則在你創(chuàng)建節(jié)點名后面增加10位數(shù)字(例如:你創(chuàng)建一個 testplatform/test 節(jié)點,實際創(chuàng)建的是 testplatform/test0000000003,這串數(shù)字是順序遞增的)。默認 False
makepath: 若為 False 父節(jié)點不存在時拋 NoNodeError。若為 True 父節(jié)點不存在則創(chuàng)建父節(jié)點。默認 False
舉個例子:
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 創(chuàng)建節(jié)點:makepath 設置為 True ,父節(jié)點不存在則創(chuàng)建,其他參數(shù)不填均為默認
zk.create('/testplatform/test',b'this is test!',makepath=True)
# 操作完后,別忘了關(guān)閉zk連接
zk.stop()
print(value)KazooClient 類用提供 get_children() 和 get() 方法獲取 子節(jié)點 和 節(jié)點對應的值
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 獲取某個節(jié)點下所有子節(jié)點
node = zk.get_children('/testplatform')
# 獲取某個節(jié)點對應的值
value = zk.get('/testplatform/mssql')
# 操作完后,別忘了關(guān)閉zk連接
zk.stop()
print(node,value)更改上文創(chuàng)建的 node 值,使用 set() 方法
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 更改節(jié)點對應的value
zk.set('/testplatform/test',b'this is not test')
# 獲取某個節(jié)點對應的值
value = zk.get('/testplatform/test')
zk.stop()
print(value)刪除上文創(chuàng)建的節(jié)點,使用 delete() 方法
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 刪除節(jié)點對應的value
zk.delete('/testplatform/test',recursive=False)
zk.stop()參數(shù) recursive:若為 False,當需要刪除的節(jié)點存在子節(jié)點,會拋異常 NotEmptyError 。若為True,則刪除 此節(jié)點 以及 刪除該節(jié)點的所有子節(jié)點
zookeeper 所有讀操作都有設置 watch 選項(get_children() 、get() 和 exists())。watch 是一個觸發(fā)器,當檢測到 zookeeper 有子節(jié)點變動 或者 節(jié)點value發(fā)生變動時觸發(fā)。下面以 get() 方法為例。
from kazoo.client import KazooClient
zk = KazooClient(hosts='10.1.44.55')
zk.start()
def test(event):
print('觸發(fā)事件')
if __name__ == "__main__":
zk.get('/testplatform/test',watch = test)
print("第一次獲取value")
zk.set('/testplatform/test',b'hello')
zk.get('/testplatform/test',watch = test)
print("第二次獲取value")
# 輸出
#第一次獲取value
#觸發(fā)事件
#第二次獲取value看完上述內(nèi)容,你們掌握zookeeper怎么利用python進行操作的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當前標題:zookeeper怎么利用python進行操作-創(chuàng)新互聯(lián)
鏈接地址:http://www.js-pz168.com/article6/dgdcog.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、標簽優(yōu)化、網(wǎng)頁設計公司、網(wǎng)站維護、外貿(mào)建站、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容