Zookeeper 初体验之——JAVA API 初探
来源:互联网 发布:php采集站 编辑:程序博客网 时间:2024/05/20 14:42
原文链接(http://www.cnblogs.com/haippy/archive/2012/07/19/2600032.html)
简介
Apache Zookeeper 是由 Apache Hadoop 的 Zookeeper 子项目发展而来,现在已经成为了 Apache 的顶级项目。Zookeeper 为分布式系统提供了高效可靠且易于使用的协同服务,它可以为分布式应eper 子用提供相当多的服务,诸如统一命名服务,配置管理,状态同步和组服务等。 Zookeeper 接口简单,开发人员不必过多地纠结在分布式系统编程难于处理的同步和一致性问题上,你可以使用 Zookeeper 提供的现成(off-the-shelf)服务来实现分布式系统的配置管理,组管理,Leader 选举等功能。
Zookeeper 维护了大规模分布式系统中的常用对象,比如配置信息,层次化命名空间等,本文将从开发者的角度详细介绍 Zookeeper 的配置信息的意义以及 Zookeeper 的典型应用场景(配置文件的管理、集群管理、分布式队列、同步锁、Leader 选举、队列管理等)。
Zookeeper 提供了原生的Java API,另外还有C调用接口,本文暂不介绍Zookeeper 的 C API。
Zookeeper Java API
Zookeeper 作为一个分布式服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
Zookeeper 客户端在连接 Zookeeper 服务器需要实例化一个org.apache.zookeeper.ZooKeeper对象,然后调用该类提供的接口与Zookeeper服务器进行交互。如果不指明,该类的所有方法均是线程安全的。
一旦 Zookeeper 客户端与服务器建立连接,客户端就会被分配一个会话ID(session ID),客户端会定期向服务器端发送心跳以保持该会话有效。只要客户端会话有效,应用程序可以调用Zookeeper客户端的接口与服务器端进行交互。
下表主要介绍了org.apache.zookeeper. ZooKeeper 方法(该表摘自IBM Developerworks:分布式服务框架 Zookeeper -- 管理分布式环境中的数据)
Perms 有 ALL、READ、WRITE、CREATE、DELETE、ADMIN 几种
而 id 标识了访问目录节点的身份列表,默认情况下有以下两种:
ANYONE_ID_UNSAFE = new Id("world", "anyone") 和 AUTH_IDS = new Id("auth", "") 分别表示任何人都可以访问和创建者拥有访问权限。List<ACL>getACL(String path,Stat stat)获取某个目录节点的访问权限列表
除了以上这些上表中列出的方法之外还有一些重载方法,如都提供了一个回调类的重载方法以及可以设置特定 Watcher 的重载方法,具体的方法可以参考 org.apache.zookeeper. ZooKeeper 类的 API 说明。
下面给出Java API 的基本操作:
// 创建一个与服务器的连接 ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT, ClientBase.CONNECTION_TIMEOUT, new Watcher() { // 监控所有被触发的事件 public void process(WatchedEvent event) { System.out.println("已经触发了" + event.getType() + "事件!"); } }); // 创建一个目录节点 zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // 创建一个子目录节点 zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); System.out.println(new String(zk.getData("/testRootPath",false,null))); // 取出子目录节点列表 System.out.println(zk.getChildren("/testRootPath",true)); // 修改子目录节点数据 zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1); System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]"); // 创建另外一个子目录节点 zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null))); // 删除子目录节点 zk.delete("/testRootPath/testChildPathTwo",-1); zk.delete("/testRootPath/testChildPathOne",-1); // 删除父目录节点 zk.delete("/testRootPath",-1); // 关闭连接 zk.close();
- Zookeeper 初体验之——JAVA API 初探
- Zookeeper 初体验之——JAVA API 初探
- Zookeeper 初体验之——JAVA API 初探
- Zookeeper 初体验之——JAVA API 初探
- Zookeeper 初体验之——JAVA实例
- Zookeeper 初体验之——JAVA实例
- Zookeeper 初体验之——JAVA实例
- Zookeeper 初体验之——JAVA实例
- ZooKeeper的Java Api初探
- Zookeeper之JAVA API
- ZooKeeper之Java API
- Zookeeper 初体验之——伪分布式安装
- Zookeeper 初体验之——伪分布式安装
- Zookeeper 初体验之——伪分布式安装
- Zookeeper 初体验之——伪分布式安装
- ZooKeeper之Java客户端API使用—创建会话。
- ZooKeeper之Java客户端API使用—创建节点。
- ZooKeeper之Java客户端API使用—删除节点。
- Docker学习笔记(一)Docker初体验
- 热拔插Winform插件式框架设计demo
- mongodb安装和mongoVUE使用
- STL_set
- android 获取各种路径大全
- Zookeeper 初体验之——JAVA API 初探
- 压力测试工具Siege详解
- ida动态调试
- 1031. 查验身份证(15)
- 客户端打包下载七牛图片
- MySQL备份与恢复
- Python --OS 模块
- 51nod 1521 一维战舰 模拟
- SSM项目从零开始到入门001.教程整体介绍