如何用python 操作zookeeper
ZooKeeper 簡(jiǎn)介
ZooKeeper 是一個(gè)分布式的、開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是 Google 的 Chubby 一個(gè)開(kāi)源的實(shí)現(xiàn),是 Hadoop 和 Hbase 的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。ZooKeeper 支持大部分開(kāi)發(fā)語(yǔ)言,除了某些特定的功能只支持 Java 和 C。python 通過(guò) kazoo 可以實(shí)現(xiàn)操作 ZooKeeper 。
一、安裝
這個(gè)簡(jiǎn)單,使用 pip 命令安裝
pip3 install kazoo
二、連接 ZooKeeper
可通過(guò) KazooClient 類直接連接 ZooKeeper ,支持多個(gè) host ,端口默認(rèn) 2181。
import json from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start()
三、創(chuàng)建節(jié)點(diǎn)
先看下 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.
我們來(lái)解釋下這些參數(shù):
- path: 節(jié)點(diǎn)路徑
- value: 節(jié)點(diǎn)對(duì)應(yīng)的值,注意值的類型是 bytes
- ephemeral: 若為 True 則創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn),session 中斷后自動(dòng)刪除該節(jié)點(diǎn)。默認(rèn) False
- sequence: 若為 True 則在你創(chuàng)建節(jié)點(diǎn)名后面增加10位數(shù)字(例如:你創(chuàng)建一個(gè) testplatform/test 節(jié)點(diǎn),實(shí)際創(chuàng)建的是 testplatform/test0000000003,這串?dāng)?shù)字是順序遞增的)。默認(rèn) False
- makepath: 若為 False 父節(jié)點(diǎn)不存在時(shí)拋 NoNodeError。若為 True 父節(jié)點(diǎn)不存在則創(chuàng)建父節(jié)點(diǎn)。默認(rèn) False
舉個(gè)例子:
from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start() # 創(chuàng)建節(jié)點(diǎn):makepath 設(shè)置為 True ,父節(jié)點(diǎn)不存在則創(chuàng)建,其他參數(shù)不填均為默認(rèn) zk.create('/testplatform/test',b'this is test!',makepath=True) # 操作完后,別忘了關(guān)閉zk連接 zk.stop() print(value)
四、查看節(jié)點(diǎn)
KazooClient 類用提供 get_children() 和 get() 方法獲取 子節(jié)點(diǎn) 和 節(jié)點(diǎn)對(duì)應(yīng)的值
from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start() # 獲取某個(gè)節(jié)點(diǎn)下所有子節(jié)點(diǎn) node = zk.get_children('/testplatform') # 獲取某個(gè)節(jié)點(diǎn)對(duì)應(yīng)的值 value = zk.get('/testplatform/mssql') # 操作完后,別忘了關(guān)閉zk連接 zk.stop() print(node,value)
五、更改節(jié)點(diǎn)
更改上文創(chuàng)建的 node 值,使用 set() 方法
from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start() # 更改節(jié)點(diǎn)對(duì)應(yīng)的value zk.set('/testplatform/test',b'this is not test') # 獲取某個(gè)節(jié)點(diǎn)對(duì)應(yīng)的值 value = zk.get('/testplatform/test') zk.stop() print(value)
六、刪除節(jié)點(diǎn)
刪除上文創(chuàng)建的節(jié)點(diǎn),使用 delete() 方法
from kazoo.client import KazooClient zk = KazooClient(hosts='10.1.44.55') zk.start() # 刪除節(jié)點(diǎn)對(duì)應(yīng)的value zk.delete('/testplatform/test',recursive=False) zk.stop()
參數(shù) recursive:若為 False,當(dāng)需要?jiǎng)h除的節(jié)點(diǎn)存在子節(jié)點(diǎn),會(huì)拋異常 NotEmptyError 。若為True,則刪除 此節(jié)點(diǎn) 以及 刪除該節(jié)點(diǎn)的所有子節(jié)點(diǎn)
七、watches 事件
zookeeper 所有讀操作都有設(shè)置 watch 選項(xiàng)(get_children() 、get() 和 exists())。watch 是一個(gè)觸發(fā)器,當(dāng)檢測(cè)到 zookeeper 有子節(jié)點(diǎn)變動(dòng) 或者 節(jié)點(diǎn)value發(fā)生變動(dòng)時(shí)觸發(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
需要更多高階使用的同學(xué),請(qǐng)參考 kazoo 官方文檔:https://kazoo.readthedocs.io/en/latest/api/client.html
以上就是如何用python 操作zookeeper的詳細(xì)內(nèi)容,更多關(guān)于python 操作zookeeper的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringCloud用Zookeeper搭建配置中心的方法
- springcloud集成zookeeper的方法示例
- SpringBoot+Dubbo+Zookeeper實(shí)現(xiàn)簡(jiǎn)單分布式開(kāi)發(fā)的應(yīng)用詳解
- 關(guān)于idea+centos7+zookeeper報(bào)錯(cuò)connectionloss,timeout問(wèn)題
- Zookeeper全局唯一ID生成方案解析
- SpringBoot中dubbo+zookeeper實(shí)現(xiàn)分布式開(kāi)發(fā)的應(yīng)用詳解
- 基于Spring Cloud Zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)
- 2020最新IDEA SpringBoot整合Dubbo的實(shí)現(xiàn)(zookeeper版)
- SpringBoot系列教程之dubbo和Zookeeper集成方法
- Python通過(guò)zookeeper實(shí)現(xiàn)分布式服務(wù)代碼解析
- 在Java中操作Zookeeper的示例代碼詳解
- SpringCloud使用Zookeeper作為注冊(cè)中心
相關(guān)文章
人工智能學(xué)習(xí)pyTorch的ResNet殘差模塊示例詳解
這篇文章主要為大家介紹了人工智能學(xué)習(xí)pyTorch的ResNet殘差模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Python定時(shí)任務(wù)框架APScheduler原理及常用代碼
這篇文章主要介紹了Python定時(shí)任務(wù)框架APScheduler原理及常用代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10使用Python編寫(xiě)爬蟲(chóng)的基本模塊及框架使用指南
這篇文章主要介紹了使用Python編寫(xiě)爬蟲(chóng)的基本模塊及框架使用指南,模塊介紹包括了urllib和urllib2以及re的使用例子框架則是Scrapy的簡(jiǎn)介,需要的朋友可以參考下2016-01-01python使用正則表達(dá)式的search()函數(shù)實(shí)現(xiàn)指定位置搜索功能
SEARCH函數(shù),函數(shù)名。主要用來(lái)返回指定的字符串在原始字符串中首次出現(xiàn)的位置 ,從左到右查找,忽略英文字母的大小寫(xiě)。接下來(lái)通過(guò)本文給大家介紹python使用正則表達(dá)式的search()函數(shù)實(shí)現(xiàn)指定位置搜索功能,需要的朋友一起看看吧2017-11-11Python解析JSON數(shù)據(jù)的方法簡(jiǎn)單例子
這篇文章主要給大家介紹了關(guān)于Python解析JSON數(shù)據(jù)的方法,解析JSON文件是Python中非常常見(jiàn)的操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼
這篇文章主要介紹了Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼,需要的朋友可以參考下2016-08-08