Zookeeper使用场景和特性关联

Zookeeper因为分布式而生,天生具备分布式的基因。那它被用在现在哪些地方了呢?
  • Hadoop中ZooKeeper主要用于实现HA(Hive Availability),包括HDFS的NamaNode和YARN的ResourceManager的HA
  • HBase主要用ZooKeeper来实现HMaster选举与主备切换、系统容错、RootRegion管理、Region状态管理和分布式SplitWAL任务管理等。
以上两点是我从网上搜索来的很多使用Zookeeper的案例之一,也是比较高大上的使用案例之一。那为什么Zookeeper能在其中充当如此重要的角色呢?是不是它本身具备了那些重要的特性才才能使用在其中。下面我们就要来剖析Zookeeper的特性了。首先Zookeeper可以用来 存储YARN应用的运行状态。为什么能够存储运行状态呢?那就要从Zookeeper的节点说起。

Zookeeper之数据模型
Zookeeper的试图结构和标准的Unix文件系统非常类似,但是没有引入传统文件系统中的目录和文件概念。使用了ZNode这个特有概念来表示类似于文件系统中的目录和文件等概念。那么既然类似文件系统,那首先大体上有以下两个概念我们需要认识:
  • 树:ZNode节点在整个ZK中是类似于树状结构来保存。
  • 事务ID:ZXID,这是个64位的数字玩意,也就是说在ZK服务器上的每个节点的操作都是要带着整个ZXID,下面我们还将会更加详细的介绍它的用处。
节点特性
下面我们用一个思维导图来把这里的知识点联系起来。

Zookeeper使用场景和特性关联_第1张图片
  • 持久节点:创建后被保存,直到调用删除操作,才会被删除。
  • 持久顺序节点:这个特性是个好特性,首先是持久,同时是顺序的,那么这个是不是让你想到了队列呢?这个还让我想到了redis中的List类型,这个也是创建队列的好用的工具。那么这个顺序是谁维护的呢,这个顺序是父亲节点维护的,这个顺序的体现是节点名称后面加上一个整数后缀。
  • 临时节点:这个特性也好,临时顾名思义是临时的,也就是说你用的时候他在,不用的时候消息,那怎么叫用呢?这个节点的生命周期和客户端绑定在一起,客户端连接着就活着(客户端会话有效),客户端断开了连接(客户端会话失效)那么久嗝屁了。
  • 临时顺序节点:这个特性也好,首先继承了临时节点的特性,还增加了另外一个新的特性,那就是顺序的特性。
  • 状态:状态信息也很有用,其中还包括版本等信息,这个对于保证分布式数据原子性很重要。
Zookeeper之节点版本
版本主要是使用了节点中的三个version、cversion、aversion来进行控制。节点被进行了多少次操作,版本号上都会进行着记录。version属性主要是用来实现乐观锁机制中的“写入校验”。可以参考PrepRequestProcessor处理器实现类。
Zookeeper之节点WATCH
该功能类似于redis中的发布订阅模式。这其中包括客户端线程、客户端WatchManager和Zookeeper服务器三个部分。下面是WATCH注册的机制
Zookeeper使用场景和特性关联_第2张图片

Zookeeper之节点ACL
看到ACL都知道,ZNode节点是可以设置权限控制的。下面依然是使用思维导图来描述其中的主要知识点。
Zookeeper使用场景和特性关联_第3张图片

通过上面该图应该是可以了解ACL的基本包括哪些内容。

总结:通过讲了那么多ZNode的特性,无非是为了更大功能的铺垫,在Hadoop和Hbase中,无论是HA还是主备切换还是master选举,都离不开Zookeeper节点的基本特性来进行相关的程序的设计,顺序节点,临时节点等,这些都是非常好的特性。

你可能感兴趣的:(大数据)