如何用python 操作zookeeper

 更新时间:2020年12月28日 16:43:37   作者:三只松鼠  
这篇文章主要介绍了如何用python 操作zookeeper,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

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的资料请关注脚本之家其它相关文章!

相关文章

  • 详解如何使用opencv实现图片相似度检测

    详解如何使用opencv实现图片相似度检测

    这篇文章主要为大家详细介绍了如何使用opencv实现图片相似度检测,文中的示例代码讲解详细,对于我们学习人工智能有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 关于matlab图像滤波详解(二维傅里叶滤波)

    关于matlab图像滤波详解(二维傅里叶滤波)

    这篇文章主要介绍了关于matlab图像滤波详解(二维傅里叶滤波),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 详解PyTorch手写数字识别(MNIST数据集)

    详解PyTorch手写数字识别(MNIST数据集)

    这篇文章主要介绍了详解PyTorch手写数字识别(MNIST数据集),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python实现TCPserver的使用示例

    python实现TCPserver的使用示例

    python实现TCPserver是一件简单的事情,只要通过socket这个模块就可以实现,本文就来介绍一下python实现TCPserver的使用示例,感兴趣的可以了解一下
    2023-10-10
  • Python编程深度学习绘图库之matplotlib

    Python编程深度学习绘图库之matplotlib

    今天小编就为大家分享一篇关于Python编程深度学习绘图库之matplotlib,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Python函数式编程中itertools模块详解

    Python函数式编程中itertools模块详解

    这篇文章主要介绍了在Python中使用itertools模块中的组合函数的教程,来自IBM官方技术文档,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • Python批量对word文件重命名的实现示例

    Python批量对word文件重命名的实现示例

    本文主要介绍了Python批量对word文件重命名的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)

    用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)

    这篇文章主要介绍了用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 6种将Python代码打包成exe应用的方式

    6种将Python代码打包成exe应用的方式

    这篇文章主要给大家介绍了关于6种将Python代码打包成exe应用的方式,对于很多python的初学者来说,很希望将自己用python写的.py文件生成exe直接在电脑上运行,需要的朋友可以参考下
    2023-08-08
  • Python3的高阶函数map,reduce,filter的示例详解

    Python3的高阶函数map,reduce,filter的示例详解

    这篇文章主要介绍了Python3的高阶函数map,reduce,filter的示例代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论