如何用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使用wxpython开发简单记事本的方法
May 20 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
对python中Json与object转化的方法详解
Dec 31 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
python实现堆排序的实例讲解
Feb 21 Python
opencv读取视频并保存图像的方法
Jun 04 Python
Python&Matlab实现樱花的绘制
Apr 07 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
生成卡号php代码
2008/04/09 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
javascript实现的动态文字变换
2007/07/28 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
Python中除法使用的注意事项
2014/08/21 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
九年级科学教学反思
2014/01/29 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
如何写好竞聘报告
2019/04/03 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python