Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache zookeeper Zookeeper CLI-通配符支持_Apache Zookeeper - Fatal编程技术网

Apache zookeeper Zookeeper CLI-通配符支持

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)使用

看起来zookeeper CLI(zkCli.sh)不支持通配符-我还没有查看zookeeper代码,以确定它在设计方面是否不可行,或者我是否遗漏了一些愚蠢的东西

然后递归删除以字符串开头的节点的最佳方法是什么。我想做一些类似的事情:

./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)