ZooKeeper学习之路 (五)ZooKeeper API的简单使用 增删改查
讨论QQ:1586558083
zookeeper文件系统的增删改查
public class ZKDemo1 {private static final String CONNECT_STRING = "hadoop1:2181,hadoop2:2181,hadoop3:2181";
//如果zookeeper使用的是默认端口的话,此处可以省略端口号
//private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3";//设置超时时间
private static final int SESSION_TIMEOUT = 5000;public static void main(String[] args) throws Exception {
//获取zookeeper的连接
//没有配置监听的话,最后一个参数设为null
ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, null);//创建一个节点
/**
- 四个参数path, data, acl, createMode
- path:创建节点的绝对路径
- data:节点存储的数据
- acl:权限控制
- createMode:节点的类型----永久、临时 有编号的、没有编号的
- */
//String create = zk.create("/xx", "xx".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
//System.out.println(create);//输出的结果是:/xx0000000008/**
- 判断节点是否存在
- */
Stat exists = zk.exists("/xx0000000008", null);
if(exists == null) {
System.out.println("节点不存在");
}else {
System.out.println("节点存在");
}/**
- 查看节点的数据
- /
/byte[] data = zk.getData("/xx0000000008", false, null);
System.out.println(new String(data));*//**
- 修改节点的数据
- /
/Stat setData = zk.setData("/xx0000000008", "xyz".getBytes(), -1);
if(setData == null) {
System.out.println("节点不存在 --- 修改不成功");
}else {
System.out.println("节点存在 --- 修改成功");
}*//**
- 删除节点
- */
/zk.delete("/xx0000000008", -1);/
//关闭zookeeper的连接
zk.close();
}}
监听设置
1 public class ZKDemo2 { 2 3 private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3"; 4 private static final int SESSION_TIMEOUT = 5000; 5 6 public static void main(String[] args) throws Exception { 7 8 // 获取连接 9 // 当前的这个匿名内部类不是已经添加好的监听, 以后只要是当前这个zk对象添加了任何的监听器响应了之后,都会调用这个process方法 10 ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new Watcher() { 11 12 @Override 13 public void process(WatchedEvent event) { 14 15 System.out.println("1111111111111111111111"); 16 KeeperState state = event.getState(); 17 String path = event.getPath(); 18 EventType type = event.getType(); 19 20 System.out.println(state+"\t"+path+"\t"+type); 21 } 22 }); 23 24 System.out.println("2222222222222222222222"); 25 26 /** 27 * 注册监听 28 * 第二个参数有三种传法: 29 * 30 * 1、false, 表示不使用监听器 31 * 32 * 2、watcher对象, 表示当前的这次监听如果响应不了的话,就会回调当前这个watcher的process方法 33 * 34 * 3、true, 表示如果当前的会话/zk 所注册或者添加的所有的监听器的响应,都会会调用 获取连接时 初始化的 监听器对象中 的 process 方法 35 */ 36 zk.getData("/a/c", true, null); 37 38 System.out.println("3333333333333333333333333333"); 39 Thread.sleep(5000); 40 41 zk.setData("/a/c", "hehe666".getBytes(), -1); 42 43 System.out.println("4444444444444444444444444444"); 44 45 zk.close(); 46 47 48 49 } 50 51 }
输出结果
2222222222222222222222 1111111111111111111111 SyncConnected null None 3333333333333333333333333333 1111111111111111111111 SyncConnected /a/c NodeDataChanged 4444444444444444444444444444