博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据生态之zookeeper(API)
阅读量:6814 次
发布时间:2019-06-26

本文共 4646 字,大约阅读时间需要 15 分钟。

在使用maven项目编写zookeeper程序时导入相关的jar包:

org.apache.zookeeper
zookeeper
3.4.10

1.创建集群连接

//集群节点节点,之间使用逗号隔开    static String url="hadoop01:2181,hadoop02:2181,hadoop03:2181";    //集群编程入口    static ZooKeeper zk;    //超时时间    static long time=5000;    //使用静态代码块,初始化ZooKeeper对象    static {        try {            zk=new ZooKeeper(url,(int)time,null);        } catch (IOException e) {            e.printStackTrace();        }    }

2.创建节点

public void createZnode(ZooKeeper zk){        //必须使用绝对路径        String path="/test/test04";        //在创建创建节点时,必须指定节点内容        byte data[]="I am a good boy!".getBytes();        try {            /**             * zk.create的四个参数表示:             * arg1:节点路径             * arg2:节点存放的内容             * arg3:权限设置:默认             * arg4:节点类型(永久无顺序、永久有顺序、临时无顺序、临时有顺序)             */            String info = zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE                    , CreateMode.EPHEMERAL);            System.out.println(info==null?"fail":"success");        } catch (KeeperException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }

3.查看节点信息

public void getInfo(ZooKeeper zk,String path){        try {            /**             * zk.getData(path, null, null);             *  参数1:节点的绝对路径  string             *  参数2:节点的监听             *  参数3:节点的状态对象             */            byte[] data = zk.getData(path, null, null);            System.out.println("节点:"+path+"的信息是:"+(new String(data)));        } catch (KeeperException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }

4.修改节点数据

public void updateData(ZooKeeper zk,String path){        try {            /**             * zk.setData(path, data, version);             * path:修改内容的节点             * data:更新的数据             * version:修改的版本:如果不知道,写-1,表示最新版本              */            zk.setData(path,"haha".getBytes(),-1);        } catch (Exception e) {            e.printStackTrace();        }    }

5.删除节点

public void deleteZnode(ZooKeeper zk,String path){        try {            /**             * zk.delete(path, version);             * path:路径             * version:删除的版本,如果不知道,写-1,表示删除最新版本  int             */            zk.delete(path,-1);        } catch (Exception e) {            e.printStackTrace();        }    }

6.获取znode节点的权限信息

public void getACL(ZooKeeper zk,String path){        try {            /**             * zk.getACL(path,stat)             * path:路径             * stat:状态信息             */            List
acls = zk.getACL(path, null); for(ACL acl:acls){ System.out.println(acl.getPerms()); } } catch (Exception e) { e.printStackTrace(); } }

7.获取子节点

public void getChildren(ZooKeeper zk, String path) {        try {            //判断节点是否存在            if (zk.exists(path, null) == null) {                List
childrens = zk.getChildren(path, null); for(String children:childrens){ //注意这里面收到的都是当前节点下的子节点的相对路径 System.out.println(children); } } } catch (Exception e) { e.printStackTrace(); } }

8.znode的测试监听

public class testZKWatcher {    static String url="hadoop01:2181,hadoop02:2181,hadoop03:2181";    static ZooKeeper zk;    static long time=5000;    static {        try {            zk=new ZooKeeper(url,(int) time,null);        } catch (Exception e) {            e.printStackTrace();        }    }    //设置监听    public static void liisten(String path,ZooKeeper zk){        try {            zk.exists(path, new Watcher() {                @Override                //WatchedEvent event监听事件对象                public void process(WatchedEvent event) {                    //节点触发的类型(新增、修改、创建...)                    Event.EventType type = event.getType();                    //获取触发的节点的路径                    event.getPath();                    System.out.println("触发事件的路径"+path+",触发的事件的类型"+type);                }            });        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        String path="/test/test01";        liisten(path,zk);        try {            //触发监听            zk.create("jj","zzy".getBytes(),                    ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);        } catch (Exception e) {            e.printStackTrace();        }    }}

| 这里需要注意的是,监听事件是一次性的,如果需要一直监听,那么需要设置循环监听。

转载于:https://blog.51cto.com/14048416/2336621

你可能感兴趣的文章
ActiveMQ学习笔记(3)——ActiveMQ的安装
查看>>
OSI(Open System Interconnection)网络7层模型
查看>>
Blat-windows cmd命令行脚本SMTP模式发邮件的开源工具参数详细说明
查看>>
25匹马取前5,每次只能比5匹
查看>>
使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
查看>>
linux rhel6 搭建RSYNC 差异备份详解
查看>>
mysql语句大全
查看>>
ssh执行sudo命令所遇到的错误解决
查看>>
攻克要塞 - 冲刺题目下载
查看>>
SSH登录-bash:/etc/profile Permission Denied 报错,root登录正常
查看>>
Retrofit2 再次封装(API not restful)
查看>>
OMF方式管理(2)
查看>>
AIX学习之--文件系统修复(/home)
查看>>
10个趣味Linux动画命令
查看>>
android环境搭建
查看>>
Controller增强,全局异常处理类
查看>>
Docker镜像与仓库
查看>>
Linux基础--进程管理相关命令介绍(2)
查看>>
VB.NET 自动打包程序
查看>>
CISCO引擎RPR SSO
查看>>