dremio nessie 集成玩法

发布时间 2023-12-30 13:56:55作者: 荣锋亮

昨天我简单写了dremio 集成nessie 的玩法, 实际上dremio 与nessie 的集成可以分为两大类,一类是使用nessie 做为catalog 服务
(当然也是支持写入iceberg 的),一类是基于外部工具(spark,flink) 使用nessie 做为metadata storage 然后dremio 查询

参考玩法图

  • 外部工具类的

  • catalog 类的

此时nessie 同时可以做为一个catalog 存储,同时还可以结合s3 存储创建表数据(直接利用dremoio 管理iceberg 表)

玩法说明

  • catalog 模式的
    可以直接参考我以前写的
  • 外部工具型的
    简单说明下spark 集成的,spark 基于了3.5,spark 使用了本地软件包
    环境准备
 
version: "3"
services:
  minio:
    image: minio/minio
    ports:
      - "9000:9000"
      - "19001:19001"
    environment:
      MINIO_ACCESS_KEY: minio
      MINIO_SECRET_KEY: minio123
    command: server --console-address :19001 --quiet /data
  dremio:
     build: .
     volumes:
     - ./dremio:/myappdemo
     ports:
       - "9047:9047"
       - "31010:31010"
  nessie:
     image: projectnessie/nessie:0.75.0-java
     ports:
        - "19120:19120"
        - "19121:19121"

spark 配置

spark.sql.extensions               org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,org.projectnessie.spark.extensions.NessieSparkSessionExtensions
spark.sql.catalog.nessie.warehouse s3a://myws/   
# spark.sql.catalog.nessie.type      rest
spark.sql.catalog.nessie.uri       http://localhost:19120/api/v1 # 注意使用了v api
spark.sql.catalog.nessie.ref       main
spark.sql.catalog.nessie.authentication.type NONE
spark.sql.catalog.nessie.s3.endpoint    http://localhost:9000
spark.sql.catalog.nessie.catalog-impl   org.apache.iceberg.nessie.NessieCatalog
# spark.sql.catalog.nessie.io-impl       org.apache.iceberg.aws.s3.S3FileIO
spark.sql.catalog.nessie               org.apache.iceberg.spark.SparkCatalog
spark.hadoop.fs.s3a.access.key          minio
spark.hadoop.fs.s3a.secret.key          minio123
spark.hadoop.fs.s3a.endpoint            http://localhost:9000
spark.hadoop.fs.s3a.path.style.access   true

spark sql shell

./bin/spark-sql \
  --packages "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.0,org.projectnessie.nessie-integrations:nessie-spark-extensions-3.5_2.12:0.75.0,org.apache.hadoop:hadoop-aws:3.3.3"

效果


dremio 链接(使用v2 api)


配置s3(注意应该与spark 配置的实际的s3 key 是一样的。root path 可以不一样,核心是s3 的权限)


iceberg 表信息


查询刚才创建的表

nessie 系统效果


当然此时还是可以创建表的,源数据也是存储在nessie 中的

说明

dremio 官方也写了一些关于spark 以及flink 集成的文章,都值得参考学习下,当然可以结合实际使用,上边说的两种模式也是可以混合试试使用的,同时利用nessie 方便的分支管理能力,我们可以开发灵活的数据模型

参考资料

https://iceberg.apache.org/docs/latest/nessie/
https://iceberg.apache.org/docs/1.4.3/nessie/
https://projectnessie.org/tools/iceberg/spark/
https://github.com/projectnessie/nessie
https://github.com/tabular-io/docker-spark-iceberg
https://projectnessie.org/tools/iceberg/flink/
https://docs.dremio.com/cloud/arctic/engines/flink/
https://projectnessie.org/tools/iceberg/flink/#reading-tables
https://www.dremio.com/blog/using-flink-with-apache-iceberg-and-nessie/
https://www.dremio.com/blog/intro-to-dremio-nessie-and-apache-iceberg-on-your-laptop/