首页 > 其他分享 >dremio 的加速文件系统插件简单说明

dremio 的加速文件系统插件简单说明

时间:2023-01-02 22:14:14浏览次数:37  
标签:插件 java dremio 文件系统 components new materialization

dremio 包含一个强大的功能就是反射加速,dremio 为了对于反射数据的存储开发了自己的文件系统插件

插件类图

 

 

parquet 以及iceberg 的支持

从start 入口可以看出包含了不同的处理,实际上dremio 从21 版本开始就默认基于了iceberg 存储了(同时也需要分布式存储)

 @Override
  public void start() throws IOException {
    super.start();
     // 同时还需要初始化MaterializationStore,主要是反射元数据的存储
    materializationStore = new MaterializationStore(DirectProvider.<LegacyKVStoreProvider>wrap(getContext().getKVStoreProvider()));
    formatPlugin = (ParquetFormatPlugin) formatCreator.getFormatPluginByConfig(new ParquetFormatConfig());
    icebergFormatPlugin = (IcebergFormatPlugin)formatCreator.getFormatPluginByConfig(new IcebergFormatConfig());
  }

插件对于不同数据的处理(主要是getDatasetHandle)

 @Override
  public Optional<DatasetHandle> getDatasetHandle(EntityPath datasetPath, GetDatasetOption... options) throws ConnectorException {
    // 反射数据存储有自己的格式约定,会进行判断,实际上只包含两部分
    List<String> components = normalizeComponents(datasetPath.getComponents());
    if (components == null) {
      return Optional.empty();
    }
    Preconditions.checkState(components.size() == 3, "Unexpected number of components in path");
 
    ReflectionId reflectionId = new ReflectionId(components.get(1));
    MaterializationId materializationId = new MaterializationId(components.get(2));
    Materialization materialization = getMaterialization(materializationId);
    if (materialization == null) {
      return Optional.empty();
    }
 
    FluentIterable<Refresh> refreshes = getSlices(materialization, reflectionId);
    if(refreshes == null) {
      return Optional.empty();
    }
 
    final String selectionRoot = getConfig().getPath().resolve(refreshes.first().get().getReflectionId().getId()).toString();
 
    BatchSchema currentSchema = CurrentSchemaOption.getSchema(options);
    FileConfig fileConfig = FileConfigOption.getFileConfig(options);
    List<String> sortColumns = SortColumnsOption.getSortColumns(options);
    Integer fieldCount = MaxLeafFieldCount.getCount(options);
 
    boolean icebergDataset = isUsingIcebergDataset(materialization);
    final FileSelection selection = getFileSelection(refreshes, selectionRoot, icebergDataset);
 
    final PreviousDatasetInfo pdi = new PreviousDatasetInfo(fileConfig, currentSchema, sortColumns, null, null, true);
    if (!icebergDataset) {
      FileDatasetHandle.checkMaxFiles(datasetPath.getName(), selection.getFileAttributesList().size(), getContext(), getConfig().isInternal());
    }
    // 此方法包含了实际的处理,具体可以看源码,实际上就是对于parquet以及icegerg 数据集的处理,进行判断,使用不同的访问器
    return getDatasetHandle(datasetPath, fieldCount, icebergDataset, selection, pdi);
  }

参考资料

services/accelerator/src/main/java/com/dremio/service/reflection/materialization/AccelerationStoragePlugin.java
services/accelerator/src/main/java/com/dremio/service/reflection/materialization/AccelerationFileSystem.java
services/accelerator/src/main/java/com/dremio/service/reflection/materialization/AccelerationStoragePluginConfig.java
sabot/kernel/src/main/java/com/dremio/exec/store/iceberg/IcebergExecutionDatasetAccessor.java
sabot/kernel/src/main/java/com/dremio/exec/store/parquet/ParquetFormatDatasetAccessor.java

标签:插件,java,dremio,文件系统,components,new,materialization
From: https://www.cnblogs.com/rongfengliang/p/17020668.html

相关文章

  • dremio ClassPathScanner 简单说明
    ClassPathScanner实际上是dremio基于配置+约定的类扫描处理,为了性能同时使用了开源的reflections工具包约定主要扫描包含以下约定key的类或者包/**Confi......
  • 如何解决分布式场景下的数据一致性问题?今天冰河的分布式锁服务插件mykit-lock开源啦
    大家好,我是冰河~~重磅消息:分布式锁插件mykit-lock正式开源开源地址:https://github.com/sunshinelyz/mykit-lock欢迎大家Star和Fork源码,并pr你牛逼哄哄的代码!框架简述mykit架......
  • Mybatis分页插件2.0版本发布
    v2.0更新内容:支持Mybatis缓存,count和分页同时支持(二者同步)修改拦截器签名,拦截Executor,签名如下:@Intercepts(@Signature(type=Executor.class,method="query",args=......
  • 05编写全球化的插件
    在上一章我们使用Pinia实现了全球化。但是在一个应用中不可能只有一个组件,我们需要在每个组件添加重复的计算属性代码,这样很麻烦。而Vue为我们提供了全局扩展属性,这样我们......
  • idea翻译插件traslation链接google翻译引擎无效的办法
    原因:谷歌9月28日关闭了.cn的翻译服务器。10月22日,谷歌翻译API的内地服务器也关闭,现在 Chrome浏览器以及扩展均已无法使用翻译。 解决方案:修改hosts本地域名配置......
  • dremio formatPlugin 调用链
    格式化插件在dremio中是比较核心的,包含了不少格式化插件,了解格式化插件的执行可以更好的开发自己的扩展以及了解dremio的内部机制以下是基于arthas分析的一个调用链可......
  • 解决火狐浏览器地区不可用并安装去广告插件的一种方法
    起因最近自己DIY了一台电脑,在安装完火狐浏览器并登录账号后,发现去广告插件(我一直使用的是AdBlockPlus)并没有同步过来。在扩展中搜索倒是有显示,但一点详情就成了下面这个......
  • Grafana 插件
    Grafana插件app(zabbix等)DataSource(clickhouse等)panel(clock,piechart等)安装方式离线在线以ck源为例wgethttps://storage.googleapis.com/plugins-community/vertamedia-cl......
  • pytest的conftest注意事项以及常用插件
    pytest中conftest的注意事项"""1.conftest中定义的函数或者fixture不能以test开头,要和测试用例区别开来2.通过@pytest.fixture()声明一个函数是一个fixture3.confte......
  • Eolink神技之四、IDEA工具插件Eolink ApiKit
    Eolink神技之四、IDEA工具插件EolinkApiKit目录​​Eolink神技之四、IDEA工具插件EolinkApiKit​​​​前言​​​​一、自动全代码注释​​​​1.1测试环境​​​​1.2Eo......