抽象zookeeper中的功能及实现原理

来源:互联网 发布:神之浩劫如何数据迁移 编辑:程序博客网 时间:2024/06/04 18:47

因为hadoop生态系统中的各个组件都会跟zookeeper打交道,边边角角之后,又综合的研习了一遍zookeeper的基本功能和实现原理。

没有敢说剖析更难能,在这里只是总结一下zookeeper中的主导思想:

1. 建立类似文件系统的东西,来进行nameservice的管理,这个思想可以支持zookeeper提供的命名服务;

2. 在每个znode放置watcher,实现全部资源的任何变化的监听,也可以先配置信息的共享;

3. zookeeper的znode有四种:EPHEMERAL \EPHEMERAL_SEQUENTAL \PERSISTENT \ PERSISTENT_SEQUENTAL.后两种用来存储数据。前面两种的功能比较特殊。以Zookeepr集群中的master选举为例:实现方式是在zookeeper上创建一个EPHEMERAL_SEQUENTAL类型的目录节点,然后每个Server在它们创建的节点的父节点上调用getChildren(String path, boolena watch)方法并设置watch为true。由于是EPHEMERAL_SEQUENTAL目录节点,当它对应的server死去,这个目录节点也会被自动删除。所以getChildren方法的返回值会发生变化,如此,其他的server就知道有一个server挂了。如果死去的这个server是master,每个server建立的目录节点都是有编号或者序号的,这时,编号最小的那个server就会成为master。这样就实现了master的自动选举和接替。(新增时,同样原理所有的server都会获得消息)

基于以上原理,实现了hdfs中的HA(QJM方式),hbase中的master自动选举。还有在zookeeper中的共享锁(通过序列号来表名优先地位)。

4. zookeeper在不同实例间同步消息时,会用到队列。猜测zookeeper中的队列管理和java concurrent包中的类CountDownLatch以及BlockingQueue的使用原理差不多(看部分源码是使用的java中以前的线程控制方法),实现了协同作业和交互。目前相关类是DistributedQueue。



见解浅薄,欢迎批评指导!

Any suggestions will be appreciated!

0 0
原创粉丝点击