如何用python 操作zookeeper
ZooKeeper简介
ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper支持大部分开发语言,除了某些特定的功能只支持Java和C。python通过kazoo可以实现操作 ZooKeeper。
一、安装
这个简单,使用pip命令安装
pip3installkazoo
二、连接ZooKeeper
可通过KazooClient类直接连接ZooKeeper,支持多个host,端口默认2181。
importjson fromkazoo.clientimportKazooClient zk=KazooClient(hosts='10.1.44.55') zk.start()
三、创建节点
先看下create()方法定义
defcreate(self,path,value=b"",acl=None,ephemeral=False, sequence=False,makepath=False): :parampath:Pathofnode. :paramvalue:Initialbytesvalueofnode. :paramacl::class:`~kazoo.security.ACL`list. :paramephemeral:Booleanindicatingwhethernodeisephemeral (tiedtothissession). :paramsequence:Booleanindicatingwhetherpathissuffixed withauniqueindex. :parammakepath:Whetherthepathshouldbecreatedifit doesn'texist.
我们来解释下这些参数:
- path: 节点路径
- value: 节点对应的值,注意值的类型是bytes
- ephemeral:若为True则创建一个临时节点,session中断后自动删除该节点。默认False
- sequence: 若为True则在你创建节点名后面增加10位数字(例如:你创建一个testplatform/test节点,实际创建的是testplatform/test0000000003,这串数字是顺序递增的)。默认False
- makepath: 若为False父节点不存在时抛 NoNodeError。若为True父节点不存在则创建父节点。默认False
举个例子:
fromkazoo.clientimportKazooClient
zk=KazooClient(hosts='10.1.44.55')
zk.start()
#创建节点:makepath设置为True,父节点不存在则创建,其他参数不填均为默认
zk.create('/testplatform/test',b'thisistest!',makepath=True)
#操作完后,别忘了关闭zk连接
zk.stop()
print(value)
四、查看节点
KazooClient类用提供 get_children()和 get()方法获取子节点和节点对应的值
fromkazoo.clientimportKazooClient
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()方法
fromkazoo.clientimportKazooClient
zk=KazooClient(hosts='10.1.44.55')
zk.start()
#更改节点对应的value
zk.set('/testplatform/test',b'thisisnottest')
#获取某个节点对应的值
value=zk.get('/testplatform/test')
zk.stop()
print(value)
六、删除节点
删除上文创建的节点,使用delete()方法
fromkazoo.clientimportKazooClient
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()方法为例。
fromkazoo.clientimportKazooClient
zk=KazooClient(hosts='10.1.44.55')
zk.start()
deftest(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的资料请关注毛票票其它相关文章!