dremio 社区版本scheduler 任务池加载处理机制简单说明

dremio 当前发行版本包含了已给社区版本的调度,此包的加载还是比较有意思的

参考处理机制

TaskPoolInitializer start 中会进行taskpool 的创建

 @Override
  public void start() throws Exception {
    final TaskPoolFactory factory = TaskPools.newFactory(dremioConfig.getSabotConfig());
    pool = factory.newInstance(optionManager.get(), dremioConfig);
  }

TaskPools 参考处理

public final class TaskPools {
 
  public static final String DREMIO_TASK_POOL_FACTORY_CLASS = "dremio.task.pool.factory.class";
 
  private TaskPools() {}
 
  public static TaskPoolFactory newFactory(SabotConfig config) {
    final TaskPoolFactory factory;
    // 此配置是核心,包含了会加载ce 版本的不然就是默认的
    if (config.hasPath(TaskPools.DREMIO_TASK_POOL_FACTORY_CLASS)) {
      factory = config.getInstanceOf(TaskPools.DREMIO_TASK_POOL_FACTORY_CLASS, TaskPoolFactory.class);
    } else {
      factory = new DedicatedTaskPool.Factory();
    }
 
    return factory;
  }
}

dremio-ce-sabot-scheduler 的配置
sabot-module.conf

 
dremio: {
  // Adding slicing task pool options
  classpath.scanning: {
    packages += "com.dremio.sabot.task.slicing.SlicingTaskPool"
  }
 
  // Changing default task pool factory, 因为此配置,就会加载ce 的任务调度处理机制了
  task.pool.factory.class = "com.dremio.sabot.task.slicing.SlicingTaskPool$Factory"
}

说明

ce 版本的scheduler设计还是很强大的,后变会介绍下设计,其中依赖了一个很不错的线程库锁包openhft.affinity 值得学习下

参考资料

sabot/kernel/src/main/java/com/dremio/sabot/task/TaskPools.java
sabot/kernel/src/main/java/com/dremio/sabot/exec/TaskPoolInitializer.java

posted on 2022-03-03 00:17  荣锋亮  阅读(54)  评论(0编辑  收藏  举报

导航