如何用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中使用Neo4j数据库的教程
Apr 16 Python
总结Python中逻辑运算符的使用
May 13 Python
利用python循环创建多个文件的方法
Oct 25 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
python中的&&及||的实现示例
Aug 07 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Pandas读取csv时如何设置列名
Jun 02 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
pytorch 中autograd.grad()函数的用法说明
May 12 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
xmlHTTP实例
2006/10/24 Javascript
js opener的使用详解
2014/01/11 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
python实现flappy bird小游戏
2018/12/24 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
python实现按日期归档文件
2021/01/30 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
社区党总支书记先进事迹材料
2014/01/24 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
师范生见习报告范文
2014/11/03 职场文书
质检员岗位职责范本
2015/04/07 职场文书
基层党支部承诺书
2015/04/30 职场文书
Redis入门教程详解
2021/08/30 Redis
Java数组详细介绍及相关工具类
2022/04/14 Java/Android