如何用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 json模块使用实例
Apr 11 Python
python比较2个xml内容的方法
May 11 Python
python3中bytes和string之间的互相转换
Feb 09 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
pymysql模块的操作实例
Dec 17 Python
利用python绘制数据曲线图的实现
Apr 09 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
Python 里最强的地图绘制神器
Mar 01 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
List the UTC Time on a Computer
2007/06/11 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python中的逆序遍历实例
2019/12/25 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
车间调度岗位职责
2013/11/30 职场文书
办理生育手续介绍信
2014/01/14 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS