Iceberg与Spark整合环境配置

版本对应关系

参考官网
在这里插入图片描述

核心依赖jar包

官网下载对应版本的iceberg-spark-runtime-xxx.jar包。

  1. 利用spark配置参数–package或–jars引入

–packages 参数允许你指定 Maven 仓库中的包,这些包将会被自动下载并添加到 Spark 的类路径中。这对于使用 Maven 协调版本的库特别有用,例如,当你想使用特定版本的 Spark SQL 或其他通过 Maven 发布的库时。
当你使用 --packages 指定一个坐标(如 org.apache.spark:spark-sql_2.11:2.4.0),spark-submit 会解析这个坐标并尝试从已知的 Maven 仓库中下载相应的 JAR 文件及其依赖项。如果默认的中央仓库不可用或者速度较慢,你可能会遇到下载失败或超时的情况。
在某些情况下,你可能需要配置额外的 Maven 仓库,比如你的组织有自己的私有仓库,或者你需要从其他公共仓库(如 JCenter,虽然它已经宣布停止服务)下载依赖。在这种情况下,你可以通过 --repositories 选项来指定其他仓库的位置。不过需要注意的是,–repositories 主要是为了支持 Ivy 构建工具,而在使用 Maven 坐标时,通常不需要显式指定仓库位置。

–jars 参数则用于直接指定 .jar 文件的位置(可以是本地文件系统上的位置,也可以是 HDFS 或其他分布式文件系统的 URL)。这通常用于那些没有通过 Maven 发布的库,或者是你想要显式地控制版本和位置的库。

  • spark-shell

    spark-shell --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1
    
  • spark-sql

    spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1
    
  • pyspark

    pyspark --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1
    
  • java/scala spark

     <dependency>
            <groupId>org.apache.iceberg</groupId>
            <artifactId>iceberg-spark-runtime-3.x_2.12</artifactId>
            <version>1.x.0</version>
     </dependency>
    

或者在用spark-submit命令提交的时候通过–jars或–package引入

  1. 拷贝 iceberg 的 jar 包到 Spark 的 jars 目录
    这种是推荐的方式,后续用的时候就不用每次都需要引入了
    cp /opt/software/iceberg/iceberg-spark-runtime-3.x_2.12-1.x.0.jar
    /opt/module/spark-3.x.x/jars
    

配置catalog

Spark 中支持两种 Catalog 的设置:hive 和 hadoop,Hive Catalog 就是 Iceberg 表存储使用 Hive 默认的数据路径,Hadoop Catalog 需要指定 Iceberg格式表存储路径。

使用Hive Catalog这意味着你可以使用 Hive 元数据存储来管理 Iceberg 表的元数据。这使得 Iceberg 表能够与现有的 Hive 生态系统集成。因此也是我们最常用的Catalog。

  1. 在spark配置文件中配置(推荐)

    vim spark-defaults.conf
    
  • Hive Catalog

    spark.sql.catalog.hive_prod = org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.hive_prod.type = hive
    spark.sql.catalog.hive_prod.uri = thrift://xxx.xxx.xxx:9083
    use hive_prod.db;
    
  • Hadoop Catalog

    spark.sql.catalog.hadoop_prod =org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.hadoop_prod.type = hadoop
    spark.sql.catalog.hadoop_prod.warehouse =hdfs://namespace/warehouse/spark-iceberg
    use hadoop_prod.db;
    
  • 命令行指定

    spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1\
        --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
        --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog \
        --conf spark.sql.catalog.spark_catalog.type=hive \
        --conf spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalog \
        --conf spark.sql.catalog.local.type=hadoop \
        --conf spark.sql.catalog.local.warehouse=$PWD/warehouse
    
  • 创建SparkSession时指定

     SparkSession spark = SparkSession.builder().appName("appName")
              .config("spark.sql.catalog.iceberg", "org.apache.iceberg.spark.SparkCatalog")
              .config("spark.sql.catalog.iceberg.type", "hive")
              .config("spark.sql.catalog.iceberg.warehouse", "hdfs://nameservice/warehouse/hive")
              .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
              .getOrCreate();
    

Schema和Catalog区别

  1. schema
    在 Iceberg 中,Schema 描述了表的结构,包括字段名、类型以及可选的注释等信息。简而言之,Schema 定义了表的列结构及其数据类型。例如,一个简单的 Schema 可能定义了一个表包含 id(整型)、name(字符串类型)和 timestamp(时间戳类型)等字段。当数据写入到表中时,必须遵循该表的 Schema

  2. Catalog 在 Iceberg 中扮演的是元数据管理的角色。它负责存储关于表的所有元数据信息,包括表的位置、Schema、分区策略等。你可以把 Catalog 想象成一个数据库管理系统,它跟踪所有的表和相关的元数据信息。通过 Catalog,你可以创建、删除表,也可以查询表的元数据。

    一个 Catalog 可能会连接到不同的存储后端,比如 Hadoop 分布式文件系统(HDFS)、S3 或其他对象存储服务。Iceberg 支持多种 Catalog 类型,包括 Hive Metastore、Hadoop Catalog 等,这使得 Iceberg 能够灵活地集成到现有的大数据环境中。

总结

这部分内容中我们我们主要了解iceberg和spark整合时的各种参数配置。这里总结几个最常用的catalog相关参数:

  • spark.sql.catalog.iceberg
    其实这个配置有两个对应值
    (1)org.apache.iceberg.spark.SparkCatalog
    这个是最常用的,包含hive和hadoop两种catalog类型,而我们为了能继续使用历史hive表的数据,因此这里大部分都选择hive catalog。
    (2)org.apache.iceberg.spark.SparkSessionCatalog
    这种用的较少,将iceberg catalog添加到spark内置的catalog中。

  • spark.sql.catalog.iceberg.type
    我们catalog上面选择了org.apache.iceberg.spark.SparkCatalog,而这下面又分为hive和hadoop,我们上面也说了,就选hive即可。

  • spark.sql.catalog.iceberg.warehouse
    这个是我们数据存储目录,指定即可。

  • spark.sql.extensions
    iceberg0.11.0和更高版本为Spark添加了一个扩展模块,以添加新的SQL命令,如调用存储过程或ALTER TABLE…按顺序写。
    使用这些SQL命令需要使用以下Spark属性将Iceberg扩展添加到Spark环境中:
    在这里插入图片描述
    所以这个参数也直接配置即可。

最终参数就可以如下:

 SparkSession spark = SparkSession.builder().appName("appName")
          .config("spark.sql.catalog.iceberg", "org.apache.iceberg.spark.SparkCatalog")
          .config("spark.sql.catalog.iceberg.type", "hive")
          .config("spark.sql.catalog.iceberg.warehouse", "hdfs://nameservice/warehouse/hive")
          .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
          .getOrCreate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值