首页 > 其他分享 >dremio DACModule 模块加载简单说明

dremio DACModule 模块加载简单说明

时间:2023-01-19 12:12:53浏览次数:38  
标签:dremio java dac daemon DACModule 加载

dremio DACModule 主要是模块加载初始化以及组合,是一个比较重要的模式,同时也支持基于配置进行加载(有点很多了,后边简单介绍)

加载机制

  • 支持配置加载
    可以通过dremio 运行配置文件添加dremio.daemon.module.class 支持
 
services: {
  coordinator.enabled: true,
  coordinator.master.enabled: true,
  executor.enabled: false
}
dremio:{
daemon.module.class: "com.dremio.dac.daemon.DACDaemonModule" // 默认实现可以扩展自己的
}
  • 通过动态类创建模式进行处理
    代码处理DremioDaemon 入口中
 
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);
 
      if (config.isMaster) {
        // Try autoupgrade before starting daemon
        AutoUpgrade autoUpgrade = new AutoUpgrade(config, classPathScan);
        autoUpgrade.run(false);
      }
     // 基于sabotConfig 提供的类加载以及创建机制加载社区的模块DACDaemonModule,此处就很强大了,可以扩展自己的DACDaemonModule,实现一些其他功能
      final DACModule module = sabotConfig.getInstance(DAEMON_MODULE_CLASS, DACModule.class, DACDaemonModule.class);
      try (final DACDaemon daemon = DACDaemon.newDremioDaemon(config, classPathScan, module)) {
        daemon.init();
        daemon.closeOnJVMShutDown();
        daemon.awaitClose();
      }
    } catch (final Throwable ex) {
      ProcessExit.exit(ex, "Failure while starting services.", 4);
    }
  }
}

说明

以上是一个简单的关于dremio DACModule 模块加载的说明,我们可以自己扩展实现不少强大的功能

参考资料

dac/daemon/src/main/java/com/dremio/dac/daemon/DremioDaemon.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACModule.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java

标签:dremio,java,dac,daemon,DACModule,加载
From: https://www.cnblogs.com/rongfengliang/p/17061281.html

相关文章