首页 > 解决方案 > 如何清除数据节点的所有子节点,但不删除 Zookeeper 中的数据节点本身?

问题描述

我有一个znode:/test

并且/test有两个子节点:/test/data1,/test/data2

如何删除/test/data1and/test/data2但同时不删除节点/test

标签: apache-zookeeper

解决方案


您可以执行以下操作:

zkCli.sh -server xxx ls /test | \ 
grep  "^\[" | \
grep -o -P  "\w*" | \ 
while read znode ; do zkCli.sh -server xxx delete /test/$znode ; done

这仅使用 zkCli.sh 和 bash 命令,但不是最佳的,因为它多次连接到 ZooKeeper 服务器(每次直接删除子项 + 一次用于获取子项列表)。更直接的方法是使用 ZooKeeper 客户端库(如 kazoo 或 ZooKeeper Java API)来执行此类任务。


推荐阅读