Apache zookeeper Zookeeper CLI-通配符支持
看起来zookeeper CLI(zkCli.sh)不支持通配符-我还没有查看zookeeper代码,以确定它在设计方面是否不可行,或者我是否遗漏了一些愚蠢的东西 然后递归删除以字符串开头的节点的最佳方法是什么。我想做一些类似的事情:Apache zookeeper Zookeeper CLI-通配符支持,apache-zookeeper,Apache Zookeeper,看起来zookeeper CLI(zkCli.sh)不支持通配符-我还没有查看zookeeper代码,以确定它在设计方面是否不可行,或者我是否遗漏了一些愚蠢的东西 然后递归删除以字符串开头的节点的最佳方法是什么。我想做一些类似的事情: ./zkCli.sh rmr abc* 删除以abc开头的所有节点。除了使用Java/Python或类似的客户机之外,还有什么更简单的方法吗?或者换句话说,这仅通过ZK CLI实现吗?否,当前的zkCli.sh不支持通配符删除(根据 以及,zkCli.sh)使用
./zkCli.sh rmr abc*
删除以abc开头的所有节点。除了使用Java/Python或类似的客户机之外,还有什么更简单的方法吗?或者换句话说,这仅通过ZK CLI实现吗?否,当前的
zkCli.sh
不支持通配符删除(根据
以及,zkCli.sh
)使用的类
但是,创建一个变通方法非常困难,例如在Python中使用。签出,用法是:python zkDelAll.py/abc
有趣的是,*
是一个有效的路径字符,因此您可以使用路径/abc*
创建znode
编辑:
gist的核心实现如下所示:
from kazoo.client import KazooClient
zk = KazooClient(hosts='localhost:2181')
zk.start()
for child in zk.get_children('/'):
if child.startswith('abc'):
zk.delete('/' + child)
zk.stop()
虽然这可能回答了这个问题,但在这里包含了更多答案的基本部分,并提供了供参考的链接。我最终发现,如果不使用客户机,可能不可能做到这一点,于是我自己写了一篇文章。还更改了Zookeeper CLI代码以支持通配符-放置邮件并打开>以检查它是否是对CLI的有用添加。此外,我还发现abc*是一个有效路径,因此我使用了switch,它在Zookeeper cli代码中接受Java正则表达式,对给定的路径执行批量删除或ls。对于解决方案,使用Thanx。它起作用了。一个简单的信息,如果您遇到类似“NotEmptyError”这样的错误,这是因为您要删除的子项有子项。如果您想在这种情况下删除,只需将recursive=True添加到zk.delete中作为参数,例如zk.delete('/'+child,recursive=True)