如何用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 ElementTree 基本读操作示例
Apr 09 Python
Python多线程爬虫简单示例
Mar 04 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
python批量赋值操作实例
Oct 22 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
20行python代码的入门级小游戏的详解
May 05 Python
Python模块相关知识点小结
Mar 09 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中实现进程间通讯
2006/10/09 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
Underscore源码分析
2015/12/30 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python for循环与range函数的使用详解
2019/03/23 Python
基于python监控程序是否关闭
2020/01/14 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
python开发前景如何
2020/06/11 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
《小草和大树》教学反思
2014/02/16 职场文书
2014年个人总结范文
2015/03/09 职场文书
2016春节慰问信范文
2015/03/25 职场文书
校园广播站开场白
2015/06/01 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js