首页 > 其他分享 >dremio DACDaemon 简单说明

dremio DACDaemon 简单说明

时间:2023-01-19 22:44:33浏览次数:30  
标签:dremio java dac DACDaemon 简单 main com

通过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

标签:dremio,java,dac,DACDaemon,简单,main,com
From: https://www.cnblogs.com/rongfengliang/p/17062255.html

相关文章

  • dremio DremioDaemon 简单说明
    DremioDaemon的核心是启动dremio服务同时进行一些依赖的注入简单启动说明包含了自动更新处理(主要是kv存储的,后边会介绍dremio一些任务)查找DACModule创建类,并初始化......
  • ecs-lite 源码简单分析
    初学typescript,分析的不到位欢迎指正。 ecs-lite基于ts实现的纯ecs库,可用于学习交流及H5游戏开发!https://gitee.com/aodazhang/ecs-lite?_from=gitee_search文......
  • dremio 的配置处理简单说明
    dremio的配置基于了typesafe的config参考配置模块级别的配置sabot-module.conf dremio.classpath.scanning{base.classes+="com.dremio.dac......
  • dremio DACModule 模块加载简单说明
    dremioDACModule主要是模块加载初始化以及组合,是一个比较重要的模式,同时也支持基于配置进行加载(有点很多了,后边简单介绍)加载机制支持配置加载可以通过dremio运行配......
  • MetadataReader、ClassMetadata、AnnotationMetadata的简单使用
    在Spring源码中有很多场景会去解析类的信息,比如类名、类中的方法、类上的注解,这些都可以称之为类的元数据,在Spring中对类的元数据做了抽象,并提供了一些工具类。MetadataRead......
  • 一个想活得简单的程序猿的2022年终总结!
    前言今年的总结相比以往来说,可写的太少了,但看到我17年开始写的年终总结,已定下每年写下的承诺,因此即便可写的不多,但是还是写下吧,毕竟又过了一年,总有东西会留下!今年事件......
  • 简单分析Tomcat中WebappClassLoader的loadClass方法
    tomcat自定义在Java的双亲委派机制的基础上进行了修改。甚至于为了各个服务直接相互隔离,直接打破了双亲委派机制。那么什么叫打破双亲委派机制呢?我们都知道tomcat是一个容......
  • GO语言实现一个简单的命令行词典
    一个命令行词典,使用浏览器中的开发者工具进行抓包。拿到接口后再在IDE中进行实现。抓包打开检查后找到dict查看状态代码是否为POST,复制dict选择复制为cURL(bash)拿到接......
  • [简单DP+高精度]围墙重建
    题目描述为了给同学们营造一个良好的学习环境和方便学校的管理,市政府准备对小W就读的学校进行重新规划,占地面积将再次扩大。学校通过领导会议决定,重建学校的围墙。由......
  • 位,字节,字, 二进制,八进制,十进制,十六进制简单梳理
    定义:位(bit):也叫比特,计算机中最小的计量单位;1比特也即1个二进制位字节(Byte):1个字节=8比特(位bit)=8个二进制位=2个16进制位字(word):UTF-8下一个汉字由三个字节组成;其......