dremio ConnectionConf 接口说明
2022/3/8 23:17:57
本文主要是介绍dremio ConnectionConf 接口说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基本所有dremio 的存储扩展的配置管理都会使用此类
参考类图定
ConnectionConf 继承了AbstractConnectionConf 功能比较简单,主要是提供了获取类型,以及转换为字节字符串
获取类型部分使用了dremio 的注解(开发扩展会包含一个注解,设计还是比较巧妙的,简化了注解的处理)
配置转换为字节字符串(利用了protostuff的能力,主要是方便存储使用)
参考处理
@Override
public ByteString toBytesString() {
return ByteString.copyFrom(toBytes());
}
@SuppressWarnings("unchecked")
public byte[] toBytes() {
return ProtobufIOUtil.toByteArray( (T) this, schema, LinkedBuffer.allocate() );
}
ConnectionConf 提供了newPlugin 抽象方法,我们开发存储扩展的配置管理也就是基于此方法
public abstract P newPlugin(final SabotContext context, final String name, Provider<StoragePluginId> pluginIdProvider);
比如jdbc 的
public abstract class JdbcConf<T extends DialectConf<T, JdbcStoragePlugin>> extends DialectConf<T, JdbcStoragePlugin> {
private static final Logger logger = LoggerFactory.getLogger(JdbcConf.class);
public JdbcConf() {
}
// 此方法是jdbc 特有的,简化了jdbc 的处理,newPlugin 使用JdbcSchemaFetcherFactory 会调用此方法
public abstract JdbcPluginConfig buildPluginConfig(Builder var1, CredentialsService var2, OptionManager var3);
// 创建存储扩展的实现,ManagedStoragePlugin 就使用了此方法
public JdbcStoragePlugin newPlugin(SabotContext context, String name, Provider<StoragePluginId> pluginIdProvider) {
JdbcSchemaFetcherFactory factory = JdbcSchemaFetcherFactory.of(context.getConfig(), context.getJdbcSchemaFetcherFactoryContext());
logger.debug("Plugin {} is using fetcher factory: {}", name, factory.getClass());
JdbcSchemaFetcher schemaFetcher = factory.newFetcher(name, this);
return new JdbcStoragePlugin(schemaFetcher.getConfig(), schemaFetcher, context.getConfig(), pluginIdProvider, context.getOptionManager().getOption(PlannerSettings.FULL_NESTED_SCHEMA_SUPPORT));
}
}
JdbcSchemaFetcherFactory 包装了如何创建JdbcSchemaFetcher ,参考处理
public class JdbcSchemaFetcherFactoryImpl implements JdbcSchemaFetcherFactory {
private final OptionManager optionManager;
private final CredentialsService credentialsService;
public JdbcSchemaFetcherFactoryImpl(JdbcSchemaFetcherFactoryContext context) {
this.optionManager = context.getOptionManager();
this.credentialsService = context.getCredentialsService();
}
public JdbcSchemaFetcher newFetcher(String sourceName, ConnectionConf<?, ?> connectionConf) {
JdbcConf<?> jdbcConf = (JdbcConf)connectionConf;
Supplier<Integer> rowCountQueryTimeout = () -> {
return Ints.saturatedCast(this.optionManager.getOption(JdbcConstants.JDBC_ROW_COUNT_QUERY_TIMEOUT_VALIDATOR));
};
Builder configBuilder = JdbcPluginConfig.newBuilder().withSourceName(sourceName).withRowCountQueryTimeOut(rowCountQueryTimeout);
JdbcPluginConfig pluginConfig = jdbcConf.buildPluginConfig(configBuilder, this.credentialsService, this.optionManager);
return pluginConfig.getDialect().newSchemaFetcher(pluginConfig);
}
}
同时ConnectionConf 也实现了Externalizable 方便进行序列化处理
ConnectionConf几个方法说明
- isInternal
标记是否是内部的配置(dremio 系统的,比如加速处理的)还是外部链接的(一般是可视化配置的) - writeExternal&readExternal
自定义序列化处理的 - newPlugin
基于配置生成存储扩展的 - getType
基于注解获取注册的source 类型,目前看到主要在物理执行计划处 - registerSubTypes
注册类型到jackson 中,基于了jackson的类型注册实现一个多态数据处理
ConnectionConf 的使用
目前对于ConnectionConf的使用主要是以下几个
DatasetManager(dataset管理),SourceResource(source api),ManagedStoragePlugin(具体创建存储扩展)
PhysicalPlanReader(物理执行计划读取,使用了静态方法),CatalogServiceImpl(catalog 服务管理),SourceUI(source 配置展示)
SourceService(source管理)
说明
ConnectionConf 在dremio 的ui 管理存储扩展以及一些内置存储扩展上使用的是比较多的,基于注解的开发模式,简化了存储扩展的开发
参考资料
sabot/kernel/src/main/java/com/dremio/exec/catalog/ManagedStoragePlugin.java
sabot/kernel/src/main/java/com/dremio/exec/planner/PhysicalPlanReader.java
这篇关于dremio ConnectionConf 接口说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升