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());
Ip和port替换为你Zookeeper service的ip及服务端口。注意一下第三个参数,它是一个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));
请注意version,znode在修改时会比较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);
方法会给出相关的stat,stat里面包含了如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