Hadoop学习笔记 ZooKeeper
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相关推荐
- 十四、Hadoop学习笔记————Zookeeper概述与基本概念
顺序一致性:严格按照顺序在zookeeper上执行 原子性:所有事物请求的结果,在整个集群的应用情况一致 单一视图:无论从哪个服务器进入集群,看到的东西都是一致的 可靠性:服务端成功响应后,状态会 一 ...
- Hadoop学习笔记—18.Sqoop框架学习
Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- Hadoop学习笔记一 简要介绍
Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop. 本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下.开发分布式 ...
- Hadoop学习笔记(1)
原文:http://www.cnblogs.com/zjfstudio/p/3859704.html Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分 ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...
- Hadoop学习笔记(8) ——实战 做个倒排索引
Hadoop学习笔记(8) --实战 做个倒排索引 倒排索引是文档检索系统中最常用数据结构.根据单词反过来查在文档中出现的频率,而不是根据文档来,所以称倒排索引(Inverted Index).结构如 ...
- Hadoop学习笔记—4.初识MapReduce
一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...
最新文章
- Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程
- 碉堡的小程序:用 Python 制作演示迷宫算法的 gif 动画
- android自定义滑块解锁,android 滑动解锁
- 数据库迁移 编码问题
- 2021,我的输入输出
- 细说浏览器特性检测(1)-jQuery1.4添加部分
- Centos 虚拟机克隆后eth0网卡打不开
- NVIDIA背书-Kaldi是目前最受欢迎的开源语音识别框架
- java 后端开发好吗_Java语言哪里好?为什么那么多人选择Java后端开发?
- 英文论文PDF全文翻译途径整理
- Latex排版(这里有你需要的技巧)(小白专属保姆级教程)
- ZCMU-1411 喜闻乐见的a+b
- 使用ffmpeg批量转码的命令行(以mkv转mp4为例)
- 【java多种方式实现计时器】时分秒毫秒,附带代码+运行截图
- 【c#系列】PDF进行操作-浏览、分割、合并、插入、删除(4)完
- 【年结】用友各产品年结操作
- 词语相似度计算:6、实验报告
- IPFS/Filecion现在参与还是红利期吗?哪些上市公司参与了IPFS?FIL币价未来两年能破2000U吗?
- 中国式家长 计算机入门怎么,中国式家长怎么玩 新手攻略大全[多图]
- 线程同步-信号量-strand的用法总结