Zookeeper ZNode操作

 

Zookeeper API中包如下:

org.apache.zookeeper 
org.apache.zookeeper.data 
org.apache.zookeeper.server 
org.apache.zookeeper.server.quorum 
org.apache.zookeeper.server.upgrade

其中开发者比较常用的包都集中在前两个包中

关于ZooKeeper的安装省略,请参加之前的文章。

下面我们开始用api操作ZooKeeper tree

首先,我们应该新建一个Zookeeper实例:(注意节点创建的时候path命名需要注意,有相关规则的)

ZooKeeper zk = new ZooKeeper("ip:port",3000,new MyWathcer());

 Ipport替换为你Zookeeper serviceip及服务端口。注意一下第三个参数,它是一个watcher,实现了org.apache.zookeeper.Watcher接口(实现它的process方法即可),对于节点的更新删除等操作会通知客户端,这部分可以参考watches的说明。

接下来,我们新建一个节点:

 

Id id = new Id("ip","你的zookeeper server的ip");//注意第一个参数代表通过ip验证
ACL acl1 = new ACL(ZooDefs.Perms.ALL,id);//这里表示具备all权限
List<ACL> list = new ArrayList<ACL>();
list.add(acl1);
System.out.println(zk.create("/zk_heih","yun".getBytes(),list, CreateMode.PERSISTENT));//这里表示创建持久的节点
 

 

Id类实际上是指你要的访问控制列表ACL应用的目标,而ACL代表应用到该节点的操作权限,最后的CreateMode.PERSISTENT代表你的创建节点的类型,是持久的还是瞬时的。最后方法会返回该节点的path。(如果想建立节点为某节点的子节点,那么写完整path即可,如 /zk_test/zk_ heih

下面,我们修改节点数据(data

 

int version = zk.exists("/zk_ heih ", new MyWathcer()).getVersion();
System.out.println(zk.setData("/zk_ heih ", "my".getBytes(), version));
 

 

请注意versionznode在修改时会比较version和服务器上的是否一致,如果不一致的话会抛出异常,当然你也可以将version参数至为-1.那么会匹配所有version,也就是说强制的修改。

然后我们可以查看某节点的数据

Stat stat = new Stat();
byte[] data = zk.getData("/zk_ heih ", new MyWathcer(), stat);//stat会在方法内被修改
System.out.println(new String(data));
System.out.println(stat);
 

方法会给出相关的statstat里面包含了如czid等等,具体参照api

最后我们删除刚才创建的节点:

int version = zk.exists("/zk_ heih ", new MyWathcer()).getVersion();
zk.delete("/zk_ heih ", version);
 

最后,如果你英语够好,还是看官方的文档吧:

ZooKeeper Programmer's Guide

http://hadoop.apache.org/zookeeper/docs/r3.3.0/zookeeperProgrammers.html

 

你可能感兴趣的:(apache,html,hadoop,应用服务器,zk)