6

zookeeperの実行3.3.3。次のように、CLIを介して一覧表示しようとしているznodeがあります。

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 には prune コマンド (または何か) が必要です。答えてくれてありがとう。

于 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 に答える
1

I had a similar problem and I was able to fix it by fixing the zookeeper ports to 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 に答える