如何用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制作简单的朴素基数估计器的教程
Apr 01 Python
Python的Django框架中的数据过滤功能
Jul 17 Python
Django rest framework实现分页的示例
May 24 Python
深入浅析Python传值与传址
Jul 10 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
用python实现一个简单的验证码
Dec 09 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
一个目录遍历函数
2006/10/09 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
微信小程序 地图map实例详解
2017/06/07 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
Vue路由权限控制解析
2020/11/09 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
利用python在excel中画图的实现方法
2020/03/17 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Django中ORM的基本使用教程
2020/12/22 Python
《我的信念》教学反思
2014/02/15 职场文书
《云房子》教学反思
2014/04/20 职场文书
个人委托书范文
2015/01/28 职场文书
学校远程教育工作总结
2015/08/11 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
Mysql数据库命令大全
2021/05/26 MySQL
Flask搭建一个API服务器的步骤
2021/05/28 Python
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers