如何用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 开发Activex组件方法
Nov 08 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
简单实现python聊天程序
Apr 01 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
使用python去除图片白色像素的实例
Dec 12 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Django操作session 的方法
Mar 09 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
Python制作一个随机抽奖小工具的实现
Jul 07 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 购物车实例(申精)
2009/05/11 PHP
PHP学习笔记之一
2011/01/17 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
使用Python来开发微信功能
2018/06/13 Python
python:动态路由的Flask程序代码
2019/11/22 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
演讲稿的写法
2014/05/19 职场文书
亮剑精神演讲稿
2014/05/23 职场文书
2014年采购工作总结
2014/11/20 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
北京故宫的导游词
2015/01/31 职场文书
销售员自我评价
2015/03/11 职场文书
专职安全员岗位职责
2015/04/11 职场文书
python实现学生信息管理系统(面向对象)
2022/06/05 Python