Hadoop之关键技术(四)--Zookeeper

         ZooKeeper是由一组ZooKeeper服务器构成的系统。客户端连接到一台ZooKeeper服务器上,使用并维护一个TCP连接,通过这个连接发送请求,接受响应、获取观察事件及心跳。如果这个TCP连接中断,客户端将尝试连接到另外的ZooKeeper服务器。客户端第一次连接到ZooKeeper服务时,接受这个连接的ZooKeeper服务器会为这个客户端建立一个会话,当这个客户端连接到另外的服务器是,这个会话会被新的服务器重新建立。

     ZooKeeper工作原理

      ZooKeeper服务器启动后会从配置文件中所设置的服务器中选择一台作为“领导者”,其余的机器成为“跟随者”,当且仅但一半或一半以上的“跟随者”的状态和“领导者”的状态同步之后,才代表“领导者”的选举过程完成了。此过程正确无误的结束以后,zookeeper的服务也就开启了。在整个zookeeper系统运行过程中,如果“领导者”出现问题失去了相应,那么原有的“跟随者”将重新选出一个新的“领导者”来完成整个系统的协调工作。

1.ZooKeeper的数据结构与组成

        ZooKeeper的结构类似于树,树中的节点成为znode,每个节点都可以用来储存数据。在实际使用过程中,可以给每个节点都添加一个监控,当节点的状态发生变化时,用监控触发某个事件。需要注意的是:在整个ZooKeeper系统中,一定存在根节点(“/”节点),并且所有的其他节点都必须创建在“/”节点之下。ZooKeeper的目录结构如下:


       ZooKeeper中每个节点都有一个与其相关联的ACL(access controllist,访问控制列表),每个节点能存储的数据大小限制在1MB以内。

        ZooKeeper中节点分为短暂性节点和持久性节点,当创建短暂性节点的客户端与ZooKeeper之间的对话过期后,短暂性节点会被自动删除,而持久性节点的客户端与ZooKeeper之间的会话过期后,此节点仍然在系统中。

2.ACL访问控制列表

         每个ZooKeeper节点被创建时都会带一个ACL列表,用于决定用户可以操作的类型。ACL依赖于ZooKeeper的客户端身份验证机制。ACL权限列表如下所示:


3.ZooKeepr的算法

           Zookeeper的实现主要是采用了原子广播(zookeeper atomic broadcast,简称Zab)协议。ZooKeeper服务的内部通信,是基于Zab协议,即ZooKeeper Atomic Broadcast协议。原子广播(AB)是分布式计算普遍使用的原语。本质上说,ZooKeeper服务是基于复制分发的。它需要半数以上的服务器能正常工作。崩溃的服务器能恢复并且重新加入集群。ZooKeeper采用主备方式来维护被复制状态的一致性。在ZooKeeper中,leader接受所有客户的请求并加以执行,然后将增量的状态变化,以事务的方式通过Zab复制到所有的followers。一旦leader崩溃,在进行常规操作之前,必须执行一套恢复协议,来a). 协调各followers达到一致状态,b). 选举出新的leader。为了选举出leader,新的leader必须得到多数支持(quorum)。由于zookeeper server随时都可能崩溃或恢复,随时间流逝,同一个进程可能好几次成为leader。为了能区分随时间变化的不同的leader实例,ZooKeeper为每一个leader都分配一个实例值。一个leader实例值最多能映射到一个进程。

4.原子广播

         客户端所有的写请求都被转发给“领导者”,“领导者”将收到的请求通过广播的形式发送给所有的“跟随者”,当超过半数的“跟随者”修改数据并持久后,“领导者”才会提交这个更新,这个过程的执行要么全部完成,要么全部失败。


参考文献:

[1]刘鹏.实战Hadoop.出版社:电子工业出版社。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值