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

dremio S3StoragePlugin 简单说明

时间:2023-02-24 12:24:24浏览次数:36  
标签:src dremio java s3 简单 main com S3StoragePlugin

S3StoragePlugin 核心是进行s3 的数据处理,从能力上来说主要是一个文件系统的存储插件,以前我简单介绍过关于存储扩展
的开发,一般需要包含一个存储插件配置类以及存储插件的实现(会有基于文件系统的s3,nas。。。。,基于底层基础类的jdbc 存储插件)

配置类

主要是S3PluginConfig 基于了AbstractS3PluginConfig 抽象类,配置类同时会进行存储插件的创建 (newPlugin 方法)同时s3 插件也是支持
类s3兼容的(compatibilityMode),会在存储插件中使用到(主要是S3FileSystem基于hdfs 的FileSystem 的实现,将s3 包装为一个文件系统), 详
细对于配置的使用是在文件系统存储的start 方法中(实现了标准的service 接口)

类图如下

 

 

存储插件实现

S3StoragePlugin 主要是实现FileSystemPlugin进行了部分方法的重写(getProperties,supportsColocatedReads,getState,createNewTable,isAsyncEnabledForQuery
),比较核心的实现是CreateTableEntry 方法
CreateTableEntry s3 实现处理

 
 public CreateTableEntry createNewTable(
    NamespaceKey tableSchemaPath, SchemaConfig config,
    IcebergTableProps icebergTableProps,
    WriterOptions writerOptions,
    Map<String, Object> storageOptions,
    boolean isResultsTable
  ) {
    Preconditions.checkArgument(tableSchemaPath.size() >= 2, "key must be at least two parts");
    final List<String> resolvedPath = resolveTableNameToValidPath(tableSchemaPath.getPathComponents()); // strips source name
    final String containerName = resolvedPath.get(0);
    // 进行了判断,s3 bucket 不能直接创建
    if (resolvedPath.size() == 1) {
      throw UserException.validationError()
        .message("Creating buckets is not supported (name: %s)", containerName)
        .build(logger);
    }
   //  实际还是调用FileSystemPlugin 提供的createNewTable 能力
    final CreateTableEntry entry = super.createNewTable(tableSchemaPath, config,
      icebergTableProps, writerOptions, storageOptions, isResultsTable);
 
    final S3FileSystem fs = getSystemUserFS().unwrap(S3FileSystem.class);
 
    if (!fs.containerExists(containerName)) {
      throw UserException.validationError()
          .message("Cannot create the table because '%s' bucket does not exist", containerName)
          .build(logger);
    }
 
    return entry;
  }

FileSystemPlugin 的 createNewTable 实现处理利用了FormatPlugin 、CreateParquetTableEntry、EasyFileSystemCreateTableEntry (同时对于iceberg 会有特定的处理
毕竟dremio 目前对于CTAS 的核心支持主要基于了iceberg)
参考类

 

 

使用

属于标准插件的使用,包含了UI部分(backen api),以及内部查询相关的(元数据,调度,执行。。。。)

参考资料

plugins/s3/src/main/java/com/dremio/plugins/s3/store/S3StoragePlugin.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/DirectorySupportLackingFileSystemPlugin.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/FileSystemConf.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/FileSystemPlugin.java
sabot/kernel/src/main/java/com/dremio/exec/catalog/conf/ConnectionConf.java
plugins/s3/src/main/java/com/dremio/plugins/s3/store/S3PluginConfig.java
plugins/s3/src/main/java/com/dremio/plugins/s3/store/AbstractS3PluginConfig.java
plugins/s3/src/main/java/com/dremio/plugins/s3/store/S3FileSystem.java
plugins/s3/src/main/java/com/dremio/plugins/util/ContainerFileSystem.java
services/namespace/src/main/java/com/dremio/service/namespace/AbstractConnectionConf.java
sabot/kernel/src/main/java/com/dremio/exec/catalog/MutablePlugin.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/CreateParquetTableEntry.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/EasyFileSystemCreateTableEntry.java

标签:src,dremio,java,s3,简单,main,com,S3StoragePlugin
From: https://www.cnblogs.com/rongfengliang/p/17150854.html

相关文章

  • 污水cod测定仪让检测变得简单智能
    污水cod测定仪“Glos水质智能检测系统"让检测变得简单智能。产品内置水质分析、数据查询、数据打印、引导检测模式等应用程序。详细介绍产品介绍污水CO......
  • 记Cucumber行为驱动测试的简单配置与使用方式
    产生背景代码测试的工具有很多,比如最常用的单元测试工具Junit、Jupiter、Mockito和PowerMockito,这几个可以说是Java开发者的心头好,代码测试一般都是用这几个里面的某一个......
  • 简单友好的 Python 任务调度库
    schedule:https://github.com/dbader/schedule该项目人性化的API设计,让开发者仅用几行代码就能轻松实现定时任务。它不依赖任何第三方库,全部代码也就一个文件800多......
  • jenkins简单安装及配置(Windows环境
    jenkins简单安装及配置(Windows环境)jenkins是一款跨平台的持续集成和持续交付、基于Java开发的开源软件,提供任务构建、持续集成监控的功能,可以使开发测试人员更方便的......
  • 软件工程日报——创建一个简单app和SDK的介绍
    昨天讲安卓studio和gradle等软件和环境都配置成功,今天开始创建第一个app。一、打开Androidstudio,创建一个新文件,点击File,选择NewProject里面的EmptyActivity。  ......
  • uniapp打包apk后位置无法获取(简单)
    生成云端证书  使用云端证书的SHA1值申请高德key包名自定义  打包前appid,地图key,云打包包名要和申请地图key的包名一样......
  • 【macOS软件】VMware Fusion 13.0.1(21139760)强大简单的虚拟机
    原文来源于黑果魏叔官网,转载需注明出处。应用介绍VMwareFusion是适用于Mac的强大简单的虚拟机,为Mac用户提供了在Mac上运行Windows以及与Mac应用程序并排运行的数百个其他操......
  • JPA在SpringBoot中简单使用
    前言在SpringBoot项目中可以与JPA进行搭配,这样会省很多的开发时间,以下为JPA的简单使用一、导入依赖<!--springbootjpa依赖--><dependency><groupId>org.spring......
  • Chatgpt的简单使用
    一、注册方式1、进入官网,常规操作,邮箱登录网址:https://platform.openai.com/2、找到合适的接码平台,目前全网都在用俄罗斯某接码网址:https://sms-activate.org/常规操作......
  • Python练习--简单练习(一看就能写出来的代码)
    两数之和数字的阶乘求圆的面积(输入半径,求解圆的面积)求区间内所有素数的和求前N个数字的平方和......