ZooKeeper功能介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lt623265189/article/details/82709405

        ZooKeeper是Hadoop下的一个子项目,它是针对大型分布式系统的可靠的协调系统,提供的功能包括配置维护名字服务分布式同步组服务

1.ZooKeeper API使用简介

实例化:

ZooKeeper zookeeper = new ZooKeeper(url, sessionTimeOut, null);

创建节点:

zookeeper.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

访问权限:Ids.OPEN_ACL_UNSAFE, 访问权限为开发

节点类型:CreateMode.PERSISTENT 持久节点,该节点客户端断开连接后不会删除

                  CreateMode.EPHEMERAL 临时节点,该节点客户端断开连接后删除

                  CreateMode.PERSISTEN_SEQUENTIAL 持久节点,其名下附加一个单调递增数

                  CreateMode.EPHEMERAL_SEQUENTIAL 临时节点,其名下附加一个单调递增数

扫描二维码关注公众号,回复: 3802606 查看本文章

设置节点和获取节点:

zookeeper.setData("/root", "hello".getBytes(), -1); // 设置/root节点的数据,版本号为-1,如果匹配不到相应的节点,会抛异常

// 获取/root节点的数据,并返回stat

Stat stat = new Stat();

byte[] data = zookeeper.getData("/root", false, stat);

添加子节点:

zookeeper.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

zookeeper.create("/root/child", "child data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

判断节点是否存在:

Stat stat = zookeeper.exists("/root/child", false);

if(stat == null){

      // 节点不存在

}else{

       // 节点存在

}

2. Zookeeper常常发生下面两种系统异常:

1)org.apache.ZooKeeper.KeeperException.ConnectionLossException, 客户端与其中的一台服务器的socker连接出现异常,连接丢失。

2)org.apache.ZooKeeper.KeeperException.SessionExpiredException, 客户端的session已经超过sessionTimeout,未进行任何操作

     ConnectionLossException异常可以通过重试进行处理,客户端会根据初始化ZooKeeper时传递的服务列表,自动尝试下一个服务端节点,而在这段时间内,服务端节点变更的事件就会丢失。

      SessionExpiredException异常不能通过重试进行解决,需要应用重新创建一个新的客户端(new ZooKeeper()),这时所有的watcher和EPHEMERAL节点都将丢失。

猜你喜欢

转载自blog.csdn.net/lt623265189/article/details/82709405