dremio DremioDaemon 简单说明

DremioDaemon 的核心是启动dremio服务同时进行一些依赖的注入

简单启动说明

  • 包含了自动更新处理(主要是kv 存储的,后边会介绍dremio 一些任务)
  • 查找DACModule创建类,并初始化内部包含的服务(不少是基于dremio 的service 机制启动的),等待jvm 退出,并处理一些runtime 的hook(主要是资源的释放处理)

参考代码

public static void main(String[] args) throws Exception {
    try (TimedBlock b = Timer.time("main")) {
      final DACConfig config = DACConfig.newConfig();
      final SabotConfig sabotConfig = config.getConfig().getSabotConfig();
      final ScanResult classPathScan = ClassPathScanner.fromPrescan(sabotConfig);
     // 对于master 节点,尝试直接自动升级(kv 存储相关的)
      if (config.isMaster) {
        // Try autoupgrade before starting daemon
        AutoUpgrade autoUpgrade = new AutoUpgrade(config, classPathScan);
        autoUpgrade.run(false);
      }
      // 查找DACModule 的配置类,并创建实例
      final DACModule module = sabotConfig.getInstance(DAEMON_MODULE_CLASS, DACModule.class, DACDaemonModule.class);
     // 模块创建DACDaemon,此模块实际上才是dremio 好多干活的地方
      try (final DACDaemon daemon = DACDaemon.newDremioDaemon(config, classPathScan, module)) {
       // 启动服务(一些实现service 的服务,以及启动以来的)
        daemon.init();
      // jvm 服务关闭资源释放是否的hook
        daemon.closeOnJVMShutDown();
        daemon.awaitClose();
      }
    } catch (final Throwable ex) {
      ProcessExit.exit(ex, "Failure while starting services.", 4);
    }
  }

说明

DremioDaemon 属于dremio 的入口实际上是比较重要的一个服务,同时此入口我们可以慢慢的了解dremio 个个模块的机制

参考资料

dac/daemon/src/main/java/com/dremio/dac/daemon/DremioDaemon.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemon.java

posted on 2023-01-19 20:32  荣锋亮  阅读(24)  评论(0编辑  收藏  举报

导航