Zookeeper CLI - 用空间读取Znode

时间:2012-07-10 07:29:31

标签: apache-zookeeper

是否可以通过Zookeeper CLI读取带有空格的znode?

我在区域('us-west 1'和'us-east')

下有2个值
 [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','\','+'等选项,但没有任何效果。

2 个答案:

答案 0 :(得分:7)

请尝试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 是免费的开源软件。 免责声明:我是这个工具的作者。

答案 1 :(得分: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解释为watch参数,正如您在get命令语法中所看到的那样:

  

获取路径[观察]

我建议您使用不同的字符,例如“_”,而不是znodes命名的空格。如果这不是一个选项,您将需要自己修改ZK Java客户端,或使用其他客户端。