ZooKeeper 配置管理Hadoop集群
ZooKeeper 客户端设计
ZooKeeper API
ZooKeeper 提供了一系列 API编程接口,这些API接口非常简单,就像一个可提供强一致性保证的分布式小文件系统。其具体的接口如下所示:
String create (path, data, acl, flags); //创建一个znode
void delete (path, expectedVersion); //删除一个znode
Stat setData (path, data, expectedVersion); //向znode里面写数据
byte[] getData (path, watch); //从znode获取数据
Stat exists (path, watch); //判断znode是否存在
String[] getChildren (path, watch); //获取znode的子目录
void sync (path); //同步接口
Zookeeper Watcher
Watcher是ZooKeeper中的一个核心功能。它可以监控目录节点的数据变化以及子目录的变化;一旦状态发生变化,服务器就会通知所有设置在这个目录节点上的Watcher。
Watcher基本特点
1)一次设置对应一次触发。
2)异步触发。
3)如果设置多个Watcher,顺序触发。
设置观察的操作如下所示:
exists getChildren getData
触发观察的操作如下所示:
create delete setData
写操作与内部事件对应关系
下面的表格中,第一列的写操作与第二列的事件相对应。
Watcher与内部事件对应关系
Watcher与内部事件对应关系,如下表格所示:
写操作与Watcher对应关系
写操作与Watcher对应关系,如下表格所示:
ZooKeeper配置管理
下面是一个ZooKeeper配置实例:
那么ZooKeeper到底是如何工作的呢?下面我们来分析它的工作流程:
1、比如这里有三个节点,每个节点都有一个相同的配置文件conf。
2、ZooKeeper正常工作需要编写两个东西分别为ConfigUpdater和ConfigWatcher,然后在这三个节点上分别装上ConfigWatcher。
3、ConfigWatcher会监听znode的/conf目录,znode保存了实际要更新的文件信息。
4、当需要更新文件的时候,就调用ConfigUpdater这个组件,向znode重新写入数据,更新/conf目录下对应的Data,这里可以调用setData()API来操作。
5、ConfigWatcher是观察者、订阅者,当文件更新之后,ZooKeeper会广播给ConfigWatcher的各个节点。这三个节点收到广播后,会读取znode中对应的数据,写到自己相应的目录里面,然后就生效了。
ConfigUpdater设计
ConfigUpdater代码如下所示:
Watcher设计
Watcher代码如下所示:
以上设计代码只是为大家示例分析,更多详情和实例请大家自己查看,这里不做过多介绍~~
- 点赞
- 收藏
- 关注作者
评论(0)