dremio DACDaemon 简单说明

通过DremioDaemon 我们知道dremio 服务的启动时通过DACDaemon 处理的
DACDaemon的启动

<wiz_code_mirror>
 
 
 
 
 
 
 
  // 包含了DACConfig,模块的类扫描结果, DACModule 模块实现(可以通过配置选择的,比如自定义自己的)
  DACDaemon.newDremioDaemon(config, classPathScan, module)
 
 

DACDaemon 提供的能力

  • 做为dremio 所有服务的单一容器
  • 包含web ui,嵌入式zk(可选,单机模式默认使用),以及sabot 实例的运行
  • 对于服务的启动,也就是DremioDaemon 中调用的init 方法

DACDaemon 类图

如下图,对于我们使用核心是newDremioDaemon 以及init,还有就是closeOnJVMShutDown (DremioDaemon 入口需要的)
同时DACDaemon 也包含了一个自己的main 入口,实际上应该是可以单独运行的(从设计上似乎官方包装DremioDaemon就是为了解决一些
扩展的问题)

 

 

参考处理

  • init 方法
 
public final void init() throws Exception {
  try (TimedBlock b = Timer.time("init")) {
    // 基础通用服务
    startPreServices();
   // 在master 或者无master 模式以及特定,都使用了SingletonRegistry 进行服务管理
    startServices();
    final String text;
    if (isMaster) {
      text = "master";
    } else if (isCoordinator) {
      text = "coordinator";
    } else {
      text = "worker";
    }
    System.out.println("Dremio Daemon Started as " + text);
    // LocalAdmin 服务创建,此服务更多像是一个工具使用的,后边再研究下
    LocalAdmin.getInstance().setDaemon(this);
    if(webServer != null){
      System.out.println(String.format("Webserver available at: %s://%s:%d",
          dacConfig.webSSLEnabled() ? "https" : "http", thisNode, webServer.getPort()));
    }
 
  }
}
  • 对于关联服务的处理以及dacModule模块的调用
   // 基于SingletonRegistry 实际上就是一个guice 的一个扩展模块,会注入DremioServer 服务,同时也提供一个ioc 容器的服务查找能力
   this.bootstrapRegistry = new SingletonRegistry();
    if (isMaster || isMasterless) {
      registry = new SingletonRegistry();
    } else {
      // retry if service start fails due to master is unavailable.
      registry = new NonMasterSingletonRegistry(bootstrapRegistry.provider(MasterStatusListener.class));
    }
 
    if (server == null) {
      registry.bind(DremioServer.class, new DremioServer());
    } else {
      registry.bind(DremioServer.class, server);
    }
    // dacModule 模块方法的调用主要是bootstrap 以及build,详细的后边介绍下,这个类代码还是比较多的
    dacModule.bootstrap(shutdownHook, bootstrapRegistry, scanResult, dacConfig, isMaster);
    dacModule.build(bootstrapRegistry, registry, scanResult, dacConfig, isMaster);
  • DACDaemon 的main 入口
  public static void main(final String[] args) throws Exception {
    try (TimedBlock b = Timer.time("main")) {
      DACConfig config = DACConfig.newConfig();
      // 此处会使用默认的dacModule模块实现,然后启动服务,dremio 为了方便扩展基于DremioDaemon 调整了
      DACDaemon daemon = newDremioDaemon(config, ClassPathScanner.fromPrescan(config.getConfig().getSabotConfig()));
      daemon.init();
      daemon.closeOnJVMShutDown();
    }
  }

说明

DACDaemon 核心是进行dremio所有服务的启动管理,核心上还是对于dacModule 服务的管理,后边会详细介绍关于dacModule 的

参考资料

dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemon.java
common/src/main/java/com/dremio/config/DremioConfig.java
dac/backend/src/main/java/com/dremio/dac/server/DACConfig.java
dac/backend/src/main/java/com/dremio/dac/server/DremioServer.java
common/src/main/java/com/dremio/service/ServiceRegistry.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java
dac/backend/src/main/java/com/dremio/dac/daemon/NonMasterSingletonRegistry.java

posted on   荣锋亮  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-01-19 Full Schema Stitching with Apollo Server
2019-01-19 GraphQL Gateway Architectures
2019-01-19 Modularizing your graphQL schemas
2018-01-19 sailsjs 不用写代码就能生成rest api 代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示