1. 什么是ZooKeeper?

ZooKeeper是一组工具,用来配置和支持分布式调度。

它能处理分布式应用的“部分失败”问题。

什么是部分失败?

部分失败是分布式处理系统的固有特征,即发送者无法知道接收者是否收到消息,它出现的可能性有 网络传输出现问题、接收进程已经死掉等。

ZooKeeper是Hadoop的分布式协调服务,ZooKeeper是Hadoop生态系统的一部分,但又远不止如此,它能支持更多类似的分布式平台和系统,如Jubatus,Cassender等等。

而且HBase明确指出至少需要一个ZooKeeper实例的支持。

2. ZooKeeper有什么特征?

其核心是一个精简的文件系统;

其原语是一组丰富的“构件”,可用于实现很多数据结构和协议,如分布式队列,分布式锁,同一级中的领导者选举;

能避免单点故障,高可用性;

松耦合交互方式:各进程间不必相互了解,同步等;

是一个资源库,对通用协议提供一个开源的共享存储库。

3. ZooKeeper有哪些需要配置的属性?

tickTime:  ZooKeeper运行的基本时间单元

dataDir:    存储持久数据的本地文件系统位置

clientPort: 监听客户端连接的端口(常用的端口是2181)

4. ZooKeeper的结构,及其相关的一些基本操作

ZooKeeper需要一组服务器来部署,为客户端提供服务。每个客户端会找到其中的一台服务器。问题:如何维护这组服务器?

首先,需要高可靠性。不能使用一个单节点来维护这个服务器列表,这是因为这个节点坏了,整个系统就坏了,可靠性差;而且故障的服务器自身无法将其从列表中删除。

所以,ZooKeeper需要一个具有主动修改能力的、高可靠性的服务来维护这个列表。

ZooKeeper是一个层次结构。类似一个文件系统的结构,有目录和文件的包含关系。

有一个父节点,包含一系列子节点。

父节点的命名是组名,子节点的命名就是组成员名了。

树形结构:树中的节点被称为znode,znode

ZooKeeper的操作,提供的方法、接口:

create():创建一个znode节点,其必须要有父节点,加入一个组:只需要指定/+groupname + / + membername,然后创建即可

delete():删除一个znode,其必须无子节点。需要提供路径和版本号参数。

exists():测试一个znode是否存在

sync():将客户端的znode视图与ZooKeeper同步

getACL, setACL: ACL:access control list

getChild(): 获取一个znode的子节点列表,如:zk.getChildren(path, false)

getData, setData:获取或者设置一个znode的数据

其中更改操作,需要更新znode的版本号才能完成。

5. 有哪些客户端可用的 ZooKeeper的API?

针对以上ZooKeeper的操作,Zookeeper也为客户端提供了对应的API。有两种绑定的语言Java和C,并提供同步和异步两种方式,功能都相同。

6. ZooKeeper的数据模型

1) 树形结构、每个znode节点可以存储数据、并有一个关联的ACL。但znode存储的数据被限制在1MB内。

2)数据访问具有原子性,要么成功,要么全部失败。

3)znode通过路径被引用。类似于linux的文件路径。

4)znode有两种,短暂性的和持久性的。短暂性的会在客户端结束后删除

5)顺序号:命名时,zookeeper在名字中指定了顺序号,这个在创建znode时,设置顺序标识就会产生,顺序号,可用于全局排序

6)观察:是一种机制,znode发生变化时,观察机制可以通知客户端(类似于观察者模式),观察注册后只触发一次

一般在读操作exists、getChildren和getData上设置观察,然后这些观察在create、delete、setData时触发。

7)ACL

每个znode被创建都会带有一个ACL列表,用于检验权限:谁,可以对它自己执行,何种操作

ACL依赖于ZooKeeper的身份依赖机制。

digest : 利用用户名和密码来识别客户端

host: 通过主机名 hostname 来识别客户端

ip : 利用ip来识别客户端

7. ZooKeeper的实现方式

两种模式:

独立模式:适用于测试环境,甚至单元测试。只有一个ZooKeeper服务器,但是不保证高可用性和恢复性。

复制模式:适用于生产环境,通过复制来保证高可用性和恢复性,保证半数以上的机器处于可用状态。

其实现使用Zab协议,包括两个阶段:

阶段一:领导者选举: 一台机器选为leader,其他为follower,一旦半数以上的机器与leader的同步状态相同,此阶段完成。

阶段二:原子广播:所有写请求给leader,然后再由leader广播给follower,且当半数以上follower完成同步后,leader才提交这个更新,然后客户端才收到完成的响应。

若领导者故障,则由follower中选出新的leader。

以上两个过程可以无限循环执行。

8. ZooKeeper如何提供一致性保证?

问题:一个跟随者可能滞后领导者几个更新。

若一个修改/更新需要提交,那么就需要半数以上的机器已将其持久化。每一个对znode树的更新,都会有个全局唯一ID号:zxid,这个ID号用于查询更新的位置。因为ZooKeeper会对所有更新进行排序。

ZooKeeper的更新具有原子性,要么成功,要么失败,不存在部分成功。一旦成功,更新便具有持久性。

但是不同的客户端在读取数据时,由于ZooKeeper外部通信机制的原因,其客户端的ZooKeeper状态可能是不一致的,但这种现象与ZooKeeper的一致性是兼容的。

9. 什么是会话?

一个客户端与一台ZooKeeper服务器建立一个连接,就是会话,每个会话就有一个时间限制,超时就需要重新连接。

客户端尝试链接ZooKeeper服务器失败时,会依次尝试其他服务器,直到成功或者全部失败。

心跳(ping请求):会话空闲时,发送心跳来保证会话不过期,并能检测出服务器故障。

自动故障切换:客户端在连接的服务器发生故障后,能自动切换到另外一台服务器,并且会话继续有效。

10. ZooKeeper有哪些状态?

ZooKeeper对象在一个生命周期内,有好几个状态。

getStates()方法能查询出ZooKeeper的状态。

Connecting : 新建ZooKeeper实例时

Connected : 建立连接后

SyncConnected: 使用“观察”机制,状态转换时

Disconnected: 断开后,状态。一般连接丢失后,它会自动尝试重新连接。

Closed : ZooKeeper被认为不是活跃的,不可用了。

以上这些概念仅仅是ZooKeeper学习的基本东西,还需要构建真正的应用、编写程序去实践。

使用ZooKeeper可以实现很多分布式的数据结构和协议,如barrier, 队列,和两阶段交换协议。

hadoop学习之ZooKeeper的更多相关文章

  1. hadoop学习笔记——zookeeper平台搭建

    zookeeper是一个自动管理分布式集群的一个工具,以实现集群的高可用. 比如集群中的一个机器挂掉了,没有zookeeper的话就得考虑挂一个机器对剩下集群工作的影响,而有了zookeeper,它就 ...

  2. 十五、Hadoop学习笔记————Zookeeper客户端的使用

    timeout表示会话超时时间,zookeeper靠与客户的心跳来判断会话是否有效(单位毫秒), -r为只读,表示zookeeper如果与半数以上服务器失去连接则会停止服务,如果有-r参数,则会继续保 ...

  3. 十五、Hadoop学习笔记————Zookeeper的环境搭建

    linux中/opt一般用来存放应用/var目录一般用来存放日志 sample为样例文件,复制一份zoo.cfg文件 配置zoo文件,id为服务器id(整数),host为服务器的ip地址,第一个por ...

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

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

  5. Hadoop学习(5)-zookeeper的安装和命令行,java操作

    zookeeper是干嘛的呢 Zookeeper的作用1.可以为客户端管理少量的数据kvkey:是以路径的形式表示的,那就意味着,各key之间有父子关系,比如/ 是顶层key用户建的key只能在/ 下 ...

  6. 十六、Hadoop学习笔记————Zookeeper实战

    所有服务器都会先将自己的服务器信息注册到servers中,然后每台服务器都会尝试注册master,哪台注册成功,则哪台就是master服务器. 所有的服务器都会关注master节点的删除事件,这样通过 ...

  7. Hadoop学习笔记—14.ZooKeeper环境搭建

    从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooK ...

  8. Hadoop学习之路(9)ZooKeeper安装

    文章目录 1.环境准备 1.1下载zooKeeper 1.3安装zooKeeper 1.4配置zooKeeper环境变量 1.5 修改zookeeper集群配置文件 1.6 创建myid文件 1.7 ...

  9. Hadoop学习路线图

    Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括, ...

随机推荐

  1. (Problem 5)Smallest multiple

    2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any rema ...

  2. 互联网创业十问?good(快速迭代、把握核心用户应对抄袭,不需要把商业模式考虑完备,4种失败的信号,失败者没资格说趁着年轻...)

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:曹政链接:https://www.zhihu.com/question/20264499/answer/28168079来源: ...

  3. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

    有时候我们须要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容.这是由于DataTable.Select()返回的是DataRow ...

  5. Dockerfile指令总结

    指令的一般格式为INSTRUCTION arguments,指令包含FROM.MAINTAINER.RUN等. FROM 格式为FROM <image>或FROM <image> ...

  6. swift 关于 toolbar 学习笔记

    import UIKit class ViewController: UIViewController { @IBOutlet weak var toolBar: UIToolbar! @IBOutl ...

  7. 15-UIKit(view布局、Autoresizing)

    目录: 1. 纯代码布局 2. 在View中进行代码布局 3. Autoresizing 回到顶部 1. 纯代码布局 纯代码布局分VC下和V下 [MX1-layout-code] 在VC下覆盖view ...

  8. 01-UIKit

    目录: 一.视图和控制器 二.interface Builder 回到顶部 一.视图和控制器 1 视图(view)ios程序运行期间用户所能看见的东西都可以认为是视图,比如UIwindow就是一个视图 ...

  9. c 中关于int,unsigned int , short 各种类型总结

    int类型比较特殊,具体的字节数同机器字长和编译器有关.如果要保证移植性,尽量用__int16 __int32 __int64吧__int16.__int32这种数据类型在所有平台下都分配相同的字节. ...

  10. 更改ORACLE 用户的 expired状态

    oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢? 首先, 如果是locked状态还好办, DBA直接执行alter user scott acco ...