如何用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中的集合类型操作符
Aug 19 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
python3爬取数据至mysql的方法
Jun 26 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python实现名片管理系统项目
Apr 26 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python中常用的高阶函数实例详解
Feb 21 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python3 简单实现组合设计模式
Jul 02 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把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python多进程共享变量
2016/04/06 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
关于python写入文件自动换行的问题
2018/06/23 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
世界上最好的足球商店:Unisport
2019/03/02 全球购物
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
自我评价的写作规则
2014/01/06 职场文书
广告学专业求职信
2014/06/19 职场文书
惊天动地观后感
2015/06/10 职场文书
小学生读书笔记范文
2015/06/30 职场文书
关于五一放假的通知
2015/08/18 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书