dremio ClusterCoordinator 服务简单说明
dremio ClusterCoordinator 主要是处理集群任务协商的,比如那些服务可以在什么节点上运行,以及对于查询具体这么执行,对于元数据应该如果存储以及
元数据如何进行刷新,同时还包含了节点的任务处理
相关实现类
目前官方包含了基于zk的软件运行模式,以及本地集群模式的,当然好包含了一个方便测试的NoOpClusterCoordinator,对于zk 的实现
官方给基于了apache curator 方便的java zk 工具(官方包装了一个ZKClusterClient 类,主要在ZKClusterServiceSetManager 实现中调用)
参考类图如下
备注: 可以看出实现了ClusterServiceSetManager以及ClusterElectionManager,实际上ZKClusterCoordinator 的处理都是调用了ZKClusterServiceSetManager 包装了类
ZKClusterServiceSetManager 的处理
上边也说明了ZKClusterServiceSetManager 是比较核心的类,同时也实现了ClusterServiceSetManager以及ClusterElectionManager,ZKClusterCoordinator 就是调用
的包装类方法,内部调用了ZKClusterClient 实现了dremio 标准service 接口,可以在启动的时候统一管理
- 提供的主要功能
服务的创建(根据不同角色管理不同的服务),同时支持服务的发现&服务注册以及状态管理(参考ZKServiceSet,里边包含了不少实现)
同时提供选举机制(MasterElectionService以及TaskLeaderElection都会使用此能力进行服务的处理)对于TaskLeaderElection SystemStoragePluginInitializer以及LocalSchedulerService都会使用此服务,MasterElectionService 主要做为一个master node 状态管理服务
说明
dremio 的集群协调机制对于社区版目前来说主要是基于zk的,内部处理上包装了apache curator 客户端,dremio 因为包含了协调节点,不少服务都会依赖此模块,属于一个比较重要的服务,实际上我们也可以自己参考实现可以自己的协调服务,对于其他非集群运行的协调服务实现,具体可以参考实际的源码
参考资料
services/coordinator/src/main/java/com/dremio/service/coordinator/ClusterCoordinator.java
services/coordinator/src/main/java/com/dremio/service/coordinator/ClusterServiceSetManager.java
services/coordinator/src/main/java/com/dremio/service/coordinator/ClusterElectionManager.java
services/coordinator/src/main/java/com/dremio/service/coordinator/zk/ZKClusterServiceSetManager.java
services/coordinator/src/main/java/com/dremio/service/coordinator/zk/ZKClusterClient.java
services/coordinator/src/main/java/com/dremio/service/coordinator/AbstractServiceSet.java
services/coordinator/src/main/java/com/dremio/service/coordinator/zk/ZKServiceSet.java
dac/backend/src/main/java/com/dremio/dac/daemon/SystemStoragePluginInitializer.java
dac/backend/src/main/java/com/dremio/dac/service/exec/MasterElectionService.java
services/coordinator/src/main/java/com/dremio/service/coordinator/TaskLeaderElection.java
dac/backend/src/main/java/com/dremio/dac/daemon/SystemStoragePluginInitializer.java
services/coordinator