Zookeeper是Hadoop的分布式协调服务。

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();

}

@Override

public void process(WatchedEvent event) { // Watcher interface

if (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都是身份验证模式,符合该模式的身份和一组权限的组合。

转载于:https://www.cnblogs.com/yangqk/archive/2012/06/21/2558105.html

Hadoop学习笔记 ZooKeeper相关推荐

  1. 十四、Hadoop学习笔记————Zookeeper概述与基本概念

    顺序一致性:严格按照顺序在zookeeper上执行 原子性:所有事物请求的结果,在整个集群的应用情况一致 单一视图:无论从哪个服务器进入集群,看到的东西都是一致的 可靠性:服务端成功响应后,状态会 一 ...

  2. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  3. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  4. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  5. Hadoop学习笔记(1) ——菜鸟入门

     Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下.开发分布式 ...

  6. Hadoop学习笔记(1)

    原文:http://www.cnblogs.com/zjfstudio/p/3859704.html Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分 ...

  7. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...

  8. Hadoop学习笔记(8) ——实战 做个倒排索引

    Hadoop学习笔记(8) --实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...

  9. Hadoop学习笔记—4.初识MapReduce

    一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...

最新文章

  1. Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程
  2. 碉堡的小程序:用 Python 制作演示迷宫算法的 gif 动画
  3. android自定义滑块解锁,android 滑动解锁
  4. 数据库迁移 编码问题
  5. 2021,我的输入输出
  6. 细说浏览器特性检测(1)-jQuery1.4添加部分
  7. Centos 虚拟机克隆后eth0网卡打不开
  8. NVIDIA背书-Kaldi是目前最受欢迎的开源语音识别框架
  9. java 后端开发好吗_Java语言哪里好?为什么那么多人选择Java后端开发?
  10. 英文论文PDF全文翻译途径整理
  11. Latex排版(这里有你需要的技巧)(小白专属保姆级教程)
  12. ZCMU-1411 喜闻乐见的a+b
  13. 使用ffmpeg批量转码的命令行(以mkv转mp4为例)
  14. 【java多种方式实现计时器】时分秒毫秒,附带代码+运行截图
  15. 【c#系列】PDF进行操作-浏览、分割、合并、插入、删除(4)完
  16. 【年结】用友各产品年结操作
  17. 词语相似度计算:6、实验报告
  18. IPFS/Filecion现在参与还是红利期吗?哪些上市公司参与了IPFS?FIL币价未来两年能破2000U吗?
  19. 中国式家长 计算机入门怎么,中国式家长怎么玩 新手攻略大全[多图]
  20. 线程同步-信号量-strand的用法总结

热门文章

  1. Flask笔记-通过Model访问数据库
  2. Qt实践| HTTP知识点-接入某图片验证码系统识别验证码
  3. Spring学习笔记-构造和Set方法注入Bean及集合和null值的注入
  4. Spring Boot中防表单重复提交以及拦截器登录检测
  5. Qt文档阅读笔记-stackUnder官方解析与实例
  6. mysql 不锁表备份_Mysql不锁表备份之Xtrabackup的备份与恢复
  7. ActivityManager kill reason
  8. 多线程java_初学Java要注意什么 怎么掌握Java多线程知识
  9. 高频面试题1:自增边量
  10. 1-6:学习shell之重定向