zoukankan      html  css  js  c++  java
  • 使用python操作zookeeper

    kazoo 介绍

    zookeeper的开发接口以前主要以java和c为主,随着python项目越来越多的使用zookeeper作为分布式集群实现,python的zookeeper接口也出现了很多,现在主流的纯python的zookeeper接口是kazoo。因此如何使用kazoo开发基于python的分布式程序是必须掌握的。

    安装kazoo

    pip3 install kazoo
    

    基本操作

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    zk.stop()    #与zookeeper断开
    

    创建节点

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    #makepath=True是递归创建,如果不加上中间那一段,就是建立一个空的节点
    zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True)
    node = zk.get_children('/')  # 查看根节点有多少个子节点
    print(node)
    zk.stop()    #与zookeeper断开
    

    执行输出:

    ['abc', 'zookeeper']
    

    注意:空节点的值不能用set修改,否则执行报错!

    删除节点

    如果要删除这个/abc/JQK/XYZ/0001的子node,但是想要上一级XYZ这个node还是存在的,语句如下:

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    #recursive=True是递归删除,就是无视下面的节点是否是空,都干掉,不加上的话,会提示子节点非空,删除失败
    zk.delete('/abc/JQK/XYZ/0001',recursive=True)
    node = zk.get_children('/')  # 查看根节点有多少个子节点
    print(node)
    zk.stop()    #与zookeeper断开
    

    执行输出:

    ['abc', 'zookeeper']
    

    更改节点

    现在假如要在0001这个node里更改value,比如改成:"this is my horse!",

    由于上面节点已经被删除掉了,需要先创建一次。

    语句如下:

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True)
    zk.set('/abc/JQK/XYZ/0001',b"this is my horse!")
    node = zk.get('/abc/JQK/XYZ/0001')  # 查看值
    print(node)
    zk.stop()    #与zookeeper断开
    

    执行输出:

    (b'this is my horse!', ZnodeStat(czxid=4294967449, mzxid=4294967452, ctime=1544598301273, mtime=1544598308267, version=1, cversion=0, aversion=0, ephemeralOwner=0, dataLength=17, numChildren=0, pzxid=4294967449))
    

    注意!set这种增加节点内容的方式是覆盖式增加,并不是在原有基础上增添。而且添加中文的话可能在ZooInspecter里出现的是乱码

    查看节点

    由于所有节点,都是在/ 节点上面的,直接查看根节点,就可以知道所有节点了

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    node = zk.get_children('/')
    print(node)
    zk.stop()    #与zookeeper断开
    

    执行输出:

    ['abc', 'zookeeper']

    一键清空zookeeper

    有些时候,需要将zookeeper的数据全部清空,可以使用以下代码

    from kazoo.client import KazooClient
    zk = KazooClient(hosts='192.168.91.128:2181')    #如果是本地那就写127.0.0.1
    zk.start()    #与zookeeper连接
    jiedian = zk.get_children('/')  # 查看根节点有多少个子节点
    print(jiedian)
    for i in jiedian:
        if i != 'zookeeper':  # 判断不等于zookeeper
            print(i)
            # 删除节点
            zk.delete('/%s'%i,recursive=True)
    zk.stop()    #与zookeeper断开
    

    注意:默认的zookeeper节点,是不允许删除的,所以需要做一个判断。

  • 相关阅读:
    矩阵Frobenius范数、核范数与奇异值的关系
    范数与正则化
    对偶上升法,增光拉格朗日乘子法,交替方向乘子法
    拉格朗日函数,拉格朗日对偶函数,KKT条件
    relint, 相对内点集的理解
    转:Mac 弹出App can’t be opened because Apple cannot check it for malicious software的解决方法
    数组分块1
    fzu 2275 Game [第八届福建省大学生程序设计竞赛 Problem D]
    fzu 2275 Game [第八届福建省大学生程序设计竞赛 Problem D]
    Plug-in CodeForces
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11579380.html
Copyright © 2011-2022 走看看