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
复制代码

 

出处:https://www.cnblogs.com/qingyunzong/p/8623844.html
posted @ 2021-03-07 13:50  十点书屋  阅读(89)  评论(0)    收藏  举报