如何用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 strip lstrip rstrip使用方法
Sep 06 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
Python高斯消除矩阵
Jan 02 Python
详解python数据结构和算法
Apr 18 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
python tkinter组件摆放方式详解
Sep 16 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
Pandas实现一列数据分隔为两列
May 18 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 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
Mysql的常用命令
2006/10/09 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
EJB实例的生命周期
2016/10/28 面试题
会计专业自我鉴定范文
2013/10/06 职场文书
机关财务管理制度
2014/01/17 职场文书
年会搞笑主持词
2014/03/27 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
JavaScript前端面试组合函数
2022/06/21 Javascript
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers