找不到自动清除的 Zookeeper java 类

Posted

技术标签:

【中文标题】找不到自动清除的 Zookeeper java 类【英文标题】:Zookeeper java class for autopurge not found 【发布时间】:2018-03-16 09:19:01 【问题描述】:

我有这个 zookeeper 配置:

autopurge.snapRetainCount=10
autopurge.purgeInterval=1
snapCount=3000000

我的/opt/zookeeper-3.4.11/data 目录变大了,没有autopurge 发生。

我尝试用zkCleanup.sh 清理这个烂摊子,但它什么也没做。

sysadmin@clickhouse-node1:/opt/zookeeper-3.4.11/bin$ ls /opt/zookeeper-3.4.11/data/version-2/ | wc -l
18
sysadmin@clickhouse-node1:/opt/zookeeper-3.4.11/bin$ ./zkCleanup.sh -n 10  
sysadmin@clickhouse-node1:/opt/zookeeper-3.4.11/bin$ ls /opt/zookeeper-3.4.11/data/version-2/ | wc -l
18

sysadmin@clickhouse-node1:/opt/zookeeper-3.4.11$ ls data/version-2/
log.9028ed00e  log.902eafb66  log.903362dcb  log.90374bde5  log.903b5f685  log.903f8e16a  log.b000000a8  log.b004d4eac  log.b0083c3e1
log.902b9c065  log.9030ece30  log.903590e4a  log.90395a935  log.903d9b0f0  log.90421e5d6  log.b002462e2  log.b0068bba3  log.b00a38f08

我的 zkCleanup.sh https://pastebin.com/Q9XSpSfz

UPD:来自新动物园清理脚本的日志:

sysadmin@clickhouse-node1:/opt/zookeeper-3.4.11/bin$ ./zoo_clean.sh -n 10 /opt/zookeeper-3.4.11/data /opt/zookeeper-3.4.11/logs /usr/lib/jvm/java-8-oracle/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /opt/zookeeper-3.4.11/bin/../build/classes:/opt/zookeeper-3.4.11/bin/../build/lib/*.jar:/opt/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/opt/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/opt/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/opt/zookeeper-3.4.11/bin/../conf: org.apache.zookeeper.server.PurgeTxnLog /opt/zookeeper-3.4.11/logs /opt/zookeeper-3.4.11/data -n 10 什么都没发生

知道如何解决这个问题吗?

【问题讨论】:

试试jar -tvf zookeeper.jar |grep PurgeTxnLog。还有/opt/zookeeper-3.4.11/data/opt/zoo/data是什么关系。 为什么不使用zkCleanup.sh 而不是自己填写java 命令。似乎您没有在类路径中包含 slf4japislf4j-log4j12 zkCleanup.sh 不工作,我不懂 bash。也许其中有任何问题。但是脚本执行没有问题。 试试./bin/zkCleanup.sh -n 10 你能在问题正文中更新它吗?并列出/opt/zookeeper-3.4.11/data/version-2/下的文件 【参考方案1】:

这是 3.4.11 docker image https://github.com/apache/zookeeper/pull/475zkCleanup.sh 中的一个 bug

简单的解决方法是从

编辑 zkCleanup.sh

org.apache.zookeeper.server.PurgeTxnLog "$ZOODATALOGDIR" "$ZOODATADIR" $*

org.apache.zookeeper.server.PurgeTxnLog "$ZOODATADIR" "$ZOODATALOGDIR" $*

【讨论】:

【参考方案2】:

conf/zoo.cfg 中的dataDirdataLogDir 是相对路径,以下说明可能会有所帮助:

cd /opt/zookeeper-3.4.11
./bin/zkCleanup.sh -n 10

然后你可以看到如下输出:

Removing file: Mar 15, 2018 1:57:16 PM  data/log/version-2/log.9028ed00e
Removing file: Mar 12, 2018 5:33:11 PM  data/log/version-2/log.902eafb66

【讨论】:

做这个,没有任何反应,可能是shell脚本zkCleanup.sh中的问题。将其添加到主题。【参考方案3】:

https://clickhouse.yandex/docs/en/operations/tips/#zookeeper Clickhouse 需要 zookeper 3.5+

【讨论】:

Zookeeper 3.4.11 支持的选项 autopurge.snapRetainCount 和 autopurge.purgeInterval

以上是关于找不到自动清除的 Zookeeper java 类的主要内容,如果未能解决你的问题,请参考以下文章

Windows环境安装及启动Zookeeper详细历程(含闪退找不到JAVA_HOME及无限报错原因)

maven找不到java.lang.object的类文件

idea找不到存在的包

idea Error:(4, 25) java: 找不到符号符号:类 xxx位置:程序包 xxx.xxx程序包xxx不存在

错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

开启zkserver.sh找不到路径