如何用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的资料请关注毛票票其它相关文章!