是否可以通过Zookeeper CLI读取带有空格的znode? p>
我在区域('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','\','+'等选项,但没有任何效果。
答案 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客户端,或使用其他客户端。