运行动物园管理员 3.3.3。我有一个 znode,我只是想通过 CLI 列出,如下所示:
ls /myznode/subznode
这会在第 710 行的 org.apache.ClientCnxn$SendThread.readLength 中因 IOException 而崩溃。
有人见过这个吗??有人建议可能坏数据在 znode 中。不确定是否或如何...但我也无法删除它,因为它里面有东西。
运行动物园管理员 3.3.3。我有一个 znode,我只是想通过 CLI 列出,如下所示:
ls /myznode/subznode
这会在第 710 行的 org.apache.ClientCnxn$SendThread.readLength 中因 IOException 而崩溃。
有人见过这个吗??有人建议可能坏数据在 znode 中。不确定是否或如何...但我也无法删除它,因为它里面有东西。
我可以通过增加列表调用的最大大小来解决这个问题。
我将“-Djute.maxbuffer=50111000”添加到我的 zkCli.sh 脚本中,以便它使用以下行启动客户端:
$JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
"-Djute.maxbuffer=49107800" -cp "$CLASSPATH" $CLIENT_JVMFLAGS $JVMFLAGS \
org.apache.zookeeper.ZooKeeperMain "$@"
然后我能够列出并使用 rmr /big/node
所以,问题是有问题的 znode 已经被子 znode 淹没了。它有大约500万个。Zookeeper 显然不喜欢这样。更糟糕的是,没有很好的方法来清理它。ZK 应该有一个修剪命令(或其他东西)。感谢您的回答。
鉴于您提到的错误行,
707 void readLength() throws IOException {
708 int len = incomingBuffer.getInt();
709 if (len < 0 || len >= packetLen) {
710 throw new IOException("Packet len" + len + " is out of range!");
711 }
712 incomingBuffer = ByteBuffer.allocate(len);
713 }
可能是您的数据包长度大于jute.maxBuffer
允许的长度。默认值为 4M,这应该足够了,但您可能已经用一个明显较低的值定义了该属性。无论如何,你有很多孩子吗?
我有相同的数据包超出范围异常,但出于一个非常愚蠢的原因。我指定的端口号用于我的 solr 实例,而不是嵌入式 zookeeper。我将其更新为
bin/solr zk upconfig -z http://localhost : 9983 / -n mynewconfig -d /path/to/configset 我的实例在8983上运行。
嵌入式 zookeeper 端口默认为 localhost:(hostPort+1000)
希望它可以帮助像我一样开始的人。
在我的情况下,这个错误是由于 SolrCloud (4.8.0) 的“错误”版本,升级到最新的 (4.8.1) 问题就消失了。
我有一个类似的问题,我可以通过将 zookeeper 端口修复为 2181 来解决它
您是否尝试过以编程方式访问它?就像是
ZooKeeper zooKeeper = new ZooKeeper(hostPort, 3000, myWatcher);
String path = "/myznode/subznode"
List<String> children = zooKeeper.getChildren(path, false);
for (String child : children) {
System.out.println(child);
}