6

运行动物园管理员 3.3.3。我有一个 znode,我只是想通过 CLI 列出,如下所示:

ls /myznode/subznode

这会在第 710 行的 org.apache.ClientCnxn$SendThread.readLength 中因 IOException 而崩溃。

有人见过这个吗??有人建议可能坏数据在 znode 中。不确定是否或如何...但我也无法删除它,因为它里面有东西。

4

7 回答 7

11

我可以通过增加列表调用的最大大小来解决这个问题。

我将“-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

于 2013-11-14T23:31:12.937 回答
4

所以,问题是有问题的 znode 已经被子 znode 淹没了。它有大约500万个。Zookeeper 显然不喜欢这样。更糟糕的是,没有很好的方法来清理它。ZK 应该有一个修剪命令(或其他东西)。感谢您的回答。

于 2012-05-24T14:04:13.527 回答
3

鉴于您提到的错误行,

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,这应该足够了,但您可能已经用一个明显较低的值定义了该属性。无论如何,你有很多孩子吗?

于 2012-04-27T14:45:46.043 回答
3

我有相同的数据包超出范围异常,但出于一个非常愚蠢的原因。我指定的端口号用于我的 solr 实例,而不是嵌入式 zookeeper。我将其更新为

bin/solr zk upconfig -z http://localhost : 9983 / -n mynewconfig -d /path/to/configset 我的实例在8983上运行。

嵌入式 zookeeper 端口默认为 localhost:(hostPort+1000)

希望它可以帮助像我一样开始的人。

于 2017-02-01T17:33:14.077 回答
1

在我的情况下,这个错误是由于 SolrCloud (4.8.0) 的“错误”版本,升级到最新的 (4.8.1) 问题就消失了。

于 2015-05-25T08:10:24.100 回答
1

我有一个类似的问题,我可以通过将 zookeeper 端口修复为 2181 来解决它

于 2018-02-20T16:35:45.940 回答
0

您是否尝试过以编程方式访问它?就像是

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);
}
于 2012-04-24T20:47:36.113 回答