如何用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开发编码规范
Sep 08 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
python pyheatmap包绘制热力图
Nov 09 Python
python爬取网易云音乐评论
Nov 16 Python
关于python多重赋值的小问题
Apr 17 Python
Python微信操控itchat的方法
May 31 Python
python实现的自动发送消息功能详解
Aug 15 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Django的CVB实例详解
Feb 10 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
php笔记之:AOP的应用
2013/04/24 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php数组合并的二种方法
2014/03/21 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
React组件的三种写法总结
2017/01/12 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
python self,cls,decorator的理解
2009/07/13 Python
python求列表交集的方法汇总
2014/11/10 Python
Python登录注册验证功能实现
2018/06/18 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
Python中return函数返回值实例用法
2020/11/19 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
党课学习思想汇报
2014/01/02 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
文明村创建实施方案
2014/03/27 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers