如何用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 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python实现电子书翻页小程序
Jul 23 Python
解决python 文本过滤和清理问题
Aug 28 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
django models里数据表插入数据id自增操作
Jul 15 Python
python在地图上画比例的实例详解
Nov 13 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 强制下载文件实现代码
2013/10/28 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
javascript实现微信分享
2014/12/23 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Python虚拟环境项目实例
2017/11/20 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python二元表达式用法
2019/12/04 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
在C#中如何实现多态
2014/07/02 面试题
便利店投资的创业计划书
2014/01/12 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
mysql的数据压缩性能对比详情
2021/11/07 MySQL
sql注入报错之注入原理实例解析
2022/06/10 MySQL