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