如何用python 操作zookeeper


Posted in Python onDecember 28, 2020

ZooKeeper 简介

ZooKeeper 是一个分布式的、开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper 支持大部分开发语言,除了某些特定的功能只支持 Java 和 C。python 通过 kazoo 可以实现操作 ZooKeeper 。

一、安装

 这个简单,使用 pip 命令安装

pip3 install kazoo

二、连接 ZooKeeper 

 可通过 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.

 我们来解释下这些参数:

  • path:          节点路径
  • value:         节点对应的值,注意值的类型是 bytes
  • ephemeral: 若为 True 则创建一个临时节点,session 中断后自动删除该节点。默认 False
  • sequence:     若为 True 则在你创建节点名后面增加10位数字(例如:你创建一个 testplatform/test 节点,实际创建的是 testplatform/test0000000003,这串数字是顺序递增的)。默认 False
  • makepath:  若为 False 父节点不存在时抛 NoNodeError。若为 True 父节点不存在则创建父节点。默认 False 

 举个例子:

from kazoo.client import KazooClient

zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 创建节点:makepath 设置为 True ,父节点不存在则创建,其他参数不填均为默认
zk.create('/testplatform/test',b'this is test!',makepath=True)
# 操作完后,别忘了关闭zk连接
zk.stop()
print(value)

四、查看节点

 KazooClient 类用提供 get_children() 和 get() 方法获取 子节点 和 节点对应的值

from kazoo.client import KazooClient

zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 获取某个节点下所有子节点
node = zk.get_children('/testplatform')
# 获取某个节点对应的值
value = zk.get('/testplatform/mssql')
# 操作完后,别忘了关闭zk连接
zk.stop()
print(node,value)

 五、更改节点

 更改上文创建的 node 值,使用 set() 方法

from kazoo.client import KazooClient

zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 更改节点对应的value
zk.set('/testplatform/test',b'this is not test')
# 获取某个节点对应的值
value = zk.get('/testplatform/test')
zk.stop()
print(value)

 六、删除节点

  删除上文创建的节点,使用 delete() 方法

from kazoo.client import KazooClient

zk = KazooClient(hosts='10.1.44.55')
zk.start()
# 删除节点对应的value
zk.delete('/testplatform/test',recursive=False)
zk.stop()

 参数 recursive:若为 False,当需要删除的节点存在子节点,会抛异常 NotEmptyError 。若为True,则删除 此节点 以及 删除该节点的所有子节点

七、watches 事件

 zookeeper 所有读操作都有设置 watch 选项(get_children() 、get() 和 exists())。watch 是一个触发器,当检测到 zookeeper 有子节点变动 或者 节点value发生变动时触发。下面以 get() 方法为例。

from kazoo.client import KazooClient

zk = KazooClient(hosts='10.1.44.55')
zk.start()

def test(event):
  print('触发事件')

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
#触发事件
#第二次获取value

需要更多高阶使用的同学,请参考 kazoo 官方文档:https://kazoo.readthedocs.io/en/latest/api/client.html

以上就是如何用python 操作zookeeper的详细内容,更多关于python 操作zookeeper的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
django实现类似触发器的功能
Nov 15 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
Python实现自动访问网页的例子
Feb 21 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 #Python
Python用Jira库来操作Jira
Dec 28 #Python
python性能测试工具locust的使用
Dec 28 #Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 #Python
python字典与json转换的方法总结
Dec 28 #Python
python字典按照value排序方法
Dec 28 #Python
python Timer 类使用介绍
Dec 28 #Python
You might like
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php数组转成json格式的方法
2015/03/09 PHP
php简单判断文本编码的方法
2015/07/30 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
windows及linux环境下永久修改pip镜像源的方法
2016/11/28 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
tensorflow识别自己手写数字
2018/03/14 Python
python获取中文字符串长度的方法
2018/11/14 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
学术诚信承诺书
2014/05/26 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
小学生节水倡议书
2015/04/29 职场文书
美丽心灵观后感
2015/06/01 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书