ZooKeeper学习之路 (五)ZooKeeper API的简单使用 增删改查详解大数据

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

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/9035.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论