如何用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 相关文章推荐
在Docker上开始部署Python应用的教程
Apr 17 Python
Python Web框架Tornado运行和部署
Oct 19 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
判断网页编码的方法python版
Aug 12 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
python队列Queue的详解
May 10 Python
超简单的Python HTTP服务
Jul 22 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
js 作用域和变量详解
2017/02/16 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
python中Mako库实例用法
2020/12/31 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
有关骆驼祥子的读书笔记
2015/06/26 职场文书