3

Zookeeper CLI を使用して、スペースを含む znode を読み取ることはできますか?

地域の下に 2 つの値があります (「us-west 1」と「us-east」)

 [zk: localhost:2181(CONNECTED) 11] get /regions/
 us-west 1   us-east 

「us-east」と読めます。

[zk: localhost:2181(CONNECTED) 11] get /regions/us-east
null
cZxid = 0xa
ctime = Tue Jul 10 12:41:49 IST 2012
mZxid = 0xa
mtime = Tue Jul 10 12:41:49 IST 2012
pZxid = 0x1b
cversion = 9
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 9

しかし、「us-west 1」ではありません

[zk: localhost:2181(CONNECTED) 11] get /regions/us-west 1
Node does not exist: /regions/us-west 

'%20'、'\'、'+' などのスペースのオプションを試しましたが、何も機能しませんでした。

4

2 に答える 2

8

次のように、Zookeepercliを試してください。

$ zookeepercli --servers srv1,srv2,srv3 -c create "/demo_only 1" "the value"
$ zookeepercli --servers srv1,srv2,srv3 -c get "/demo_only 1" 
the value

Zookeepercliは無料のオープン ソースです。免責事項: 私はこのツールの作成者です。

于 2014-09-17T13:52:02.817 に答える
3

ZK コマンドライン クライアントからはできないようです。Zookeeper Java クライアント (おそらくあなたが使用しているもの)get/regions/us-west 1、クライアントに付属のコード (例 Zookeeper-3.3 .5\src\java\main\org\apache\zookeeper\ZooKeeperMain.java):

public boolean parseCommand( String cmdstring ) {
    String[] args = cmdstring.split(" ");
    if (args.length == 0){
        return false;
    }
    command = args[0];
    cmdArgs = Arrays.asList(args);
    return true;
}

それらは " " で分割されているためsplit、コマンドを呼び出すときに何らかのエスケープによってその呼び出しを克服する方法を発見しない限りget、このクライアントを使用してそれらのノードを取得することはできません。上記のコードは、コマンド構文でわかるよう1に、get呼び出し中の your をパラメーターであるかのように解釈します。watchget

パスを取得 [ウォッチ]

znode の命名では、空白の代わりに「_」などの別の文字を使用することをお勧めします。それができない場合は、ZK Java クライアントを自分で変更するか、別のクライアントを使用する必要があります。

于 2012-07-10T11:33:48.980 に答える