如何用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实现对百度云的文件上传(实例讲解)
Oct 21 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
python实现超市商品销售管理系统
Oct 25 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
django配置app中的静态文件步骤
Mar 27 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
使用 django orm 写 exists 条件过滤实例
May 20 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
js获取ip和地区
2017/03/10 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
建筑项目策划书
2014/01/13 职场文书
《影子》教学反思
2014/02/21 职场文书
人事部经理岗位职责
2014/03/07 职场文书
高中军训感言600字
2014/03/11 职场文书
员工工作心得体会
2019/05/07 职场文书
Golang中异常处理机制详解
2021/06/08 Golang
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
SQL SERVER中的流程控制语句
2022/05/25 SQL Server