Hadoop ZooKeeper 学习
来源:互联网 发布:centos 7.2怎么样 编辑:程序博客网 时间:2024/05/18 01:31
Zookeeper是Hadoop的分布式协调服务。
Zookeeper是简单的,它的核心是一个精简的文件系统,它提供一些简单的操作和额外的抽象操作,如排序和通知。
Zookeeper表现力足够强,它的原语操作是一组丰富的构件,可用于实现很多协调数据结构和协议。如分布式队列,分布式锁和一组同级别的领导者选举等。
Zookeeper具有高可用性,它运行在一组机器之上,并且在设计上具有高可用性,可以帮助系统避免单点故障。
Zookeeper采用松耦合交互方式,参与者不需要彼此了解。
Zookeeper是一个资源库,它提供了一个关于通用协调模式实现和方法的开源共享存储库,能使程序员免于编写这类通用的协议。
Zookeeper也是高性能的,对于以写为主的基准吞吐量,已经超过 10000 ops,以读为主的话还要高好几倍。
Zookeeper可以被看成高可用的文件系统,但它没有文件和目录,因此可以看成一个由节点组成的目录树,节点统一称为znode,最多可以存储1M的内容。Znode的读写操作都是原语操作,即读写都是全部读或全部写,不存在读一部分和写一部分的操作,当然,也不能追加内容。因此,Zookeeper还有个组的概念,可以以组名命名父节点,成员作为子节点。
一个简单的例子:
主要需要理解的一个是 Watcher接口,一个是connectedSignal。
Watcher对象主要接收Zookeeper的回调,以 获得各种事件的通知。它接口中只有一个方法,process(WatchedEvent event),根据event的可以做处理。
当一个Zookeeper实例被创建时,会启动一个线程连接到Zookeeper服务。由于构造函数是立即返回,因此使用新建的实例之前,要确保Zookeeper之间的连接已经建立。这时需要使用一个CountDownLatch类来完成这个工作。关于CountDownLatch的使用,可以参考这篇文章:浅析Java中CountDownLatch用法。
Znode以某种方式变化时,观察机制可以让客户端得到通知。因此,可以在读操作如 exists/getChildren/getData上设置观察,写操作create/delete和setData会触发观察器,产生一个观察事件。
Zookeeper客户端API
Zookeeper提供两种API:同步执行的和异步执行的。
同步的直接返回Stat
public Stat exists(String path, Watcher watcher) throws KeeperException, InterruptedException
Stat是包含该znode元数据的对象。
异步接口使用回调实现:
public void exists(String path, Watcher watcher, StatCallback cb, Object ctx)
StatCallback接口有以下方法:
public void processResult(int rc, String path, Object ctx, Stat stat);
其中,rc参数是返回代码,对应KeeperException的代码,每个非零代码都代表一个异常。
异步API允许你一流线方式处理请求,这在某些情况下可以提供更好的吞吐量。对于以事件驱动模型编程来说,异步也更适合。
ACL
每个znode被创建时,都会带一个ACL列表,用于决定谁可以对他执行何种操作。ACL依赖于客户端的身份验证机制。Zookeeper提供三种身份验证模式:
Digest:用户名和密码
Host:主机名
IP:ip地址
每个ACL都是身份验证模式,符合该模式的身份和一组权限的组合。
Zookeeper是简单的,它的核心是一个精简的文件系统,它提供一些简单的操作和额外的抽象操作,如排序和通知。
Zookeeper表现力足够强,它的原语操作是一组丰富的构件,可用于实现很多协调数据结构和协议。如分布式队列,分布式锁和一组同级别的领导者选举等。
Zookeeper具有高可用性,它运行在一组机器之上,并且在设计上具有高可用性,可以帮助系统避免单点故障。
Zookeeper采用松耦合交互方式,参与者不需要彼此了解。
Zookeeper是一个资源库,它提供了一个关于通用协调模式实现和方法的开源共享存储库,能使程序员免于编写这类通用的协议。
Zookeeper也是高性能的,对于以写为主的基准吞吐量,已经超过 10000 ops,以读为主的话还要高好几倍。
Zookeeper可以被看成高可用的文件系统,但它没有文件和目录,因此可以看成一个由节点组成的目录树,节点统一称为znode,最多可以存储1M的内容。Znode的读写操作都是原语操作,即读写都是全部读或全部写,不存在读一部分和写一部分的操作,当然,也不能追加内容。因此,Zookeeper还有个组的概念,可以以组名命名父节点,成员作为子节点。
一个简单的例子:
public class CreateGroup implements Watcher {private static final int SESSION_TIMEOUT = 5000;private ZooKeeper zk;private CountDownLatch connectedSignal = new CountDownLatch(1);public void connect(String hosts) throws IOException, InterruptedException {zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);connectedSignal.await();}@Overridepublic void process(WatchedEvent event) { // Watcher interfaceif (event.getState() == KeeperState.SyncConnected) {connectedSignal.countDown();}}public void create(String groupName) throws KeeperException,InterruptedException {String path = "/" + groupName;String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);System.out.println("Created " + createdPath);}public void close() throws InterruptedException {zk.close();}public static void main(String[] args) throws Exception {CreateGroup createGroup = new CreateGroup();createGroup.connect(args[0]);createGroup.create(args[1]);createGroup.close();}}
主要需要理解的一个是 Watcher接口,一个是connectedSignal。
Watcher对象主要接收Zookeeper的回调,以 获得各种事件的通知。它接口中只有一个方法,process(WatchedEvent event),根据event的可以做处理。
当一个Zookeeper实例被创建时,会启动一个线程连接到Zookeeper服务。由于构造函数是立即返回,因此使用新建的实例之前,要确保Zookeeper之间的连接已经建立。这时需要使用一个CountDownLatch类来完成这个工作。关于CountDownLatch的使用,可以参考这篇文章:浅析Java中CountDownLatch用法。
Znode以某种方式变化时,观察机制可以让客户端得到通知。因此,可以在读操作如 exists/getChildren/getData上设置观察,写操作create/delete和setData会触发观察器,产生一个观察事件。
Zookeeper客户端API
Zookeeper提供两种API:同步执行的和异步执行的。
同步的直接返回Stat
public Stat exists(String path, Watcher watcher) throws KeeperException, InterruptedException
Stat是包含该znode元数据的对象。
异步接口使用回调实现:
public void exists(String path, Watcher watcher, StatCallback cb, Object ctx)
StatCallback接口有以下方法:
public void processResult(int rc, String path, Object ctx, Stat stat);
其中,rc参数是返回代码,对应KeeperException的代码,每个非零代码都代表一个异常。
异步API允许你一流线方式处理请求,这在某些情况下可以提供更好的吞吐量。对于以事件驱动模型编程来说,异步也更适合。
ACL
每个znode被创建时,都会带一个ACL列表,用于决定谁可以对他执行何种操作。ACL依赖于客户端的身份验证机制。Zookeeper提供三种身份验证模式:
Digest:用户名和密码
Host:主机名
IP:ip地址
每个ACL都是身份验证模式,符合该模式的身份和一组权限的组合。
- Hadoop ZooKeeper 学习
- hadoop学习之ZooKeeper
- hadoop学习之ZooKeeper
- hadoop学习三 -- zookeeper安装
- hadoop学习笔记:zookeeper学习(上)
- hadoop学习之zookeeper(6):zookeeper的安装配置
- Hadoop学习之zookeeper(1)
- Hadoop学习之zookeeper(集群安装)
- Hadoop学习之zookeeper(2)
- Hadoop之Zookeeper学习(一)
- 学习Hadoop第十八课(Zookeeper)
- hadoop学习笔记之zookeeper 安装配置
- hadoop学习笔记之zookeeper服务
- hadoop学习笔记(十)——hadoop + hbase + zookeeper
- Hadoop--ZooKeeper
- Hadoop-zookeeper
- Hadoop学习之ZooKeeper理论知识和集群安装配置
- 学习Hadoop的前奏——初识zookeeper
- expect 脚本 命令记录
- 我的断点心得——帮初学者进阶
- 关于ARM里面的CMP指令的个人理解
- 第三周项目4
- 深入:ASP.NET MVC管道
- Hadoop ZooKeeper 学习
- svn update 状态含义
- ubuntu中tr命令使用教程
- UITableView循环重复显示混乱的问题
- setWindowPos
- 我的断点心得——帮初学者进阶
- udo/tcp协议占用端口列表(因5060被占用而采用的新端口)
- Windows Phone应用开发历程二(应用推荐)
- 索引