更新时间:2025-09-18 GMT+08:00
分享

Spark on iceberg最佳实践

概述

Iceberg是一种开放的数据湖表格式。您可以借助Iceberg快速地在HDFS或者华为云OBS上构建自己的数据湖存储服务,并借助开源大数据生态的Spark、Flink、Hive和Trino等计算引擎来实现数据湖的分析。

前提条件

  • 完成Hadoop部署和对接OBS,详情参考Hadoop对接OBS
  • 完成Spark部署。

    如果数据目录Catalog选择Hive,Spark请使用预构建的包含Hive的Spark版本,可以spark-xxx-bin-hadoop3.tgz或者使用以下命令构建:

    mvn -DskipTests clean package -Phive -Phive-thriftserver

    注意,spark-xxx-bin-without-hadoop.tgz预构建没有包含Hive,请避免使用。

配置spark on iceberg环境

  1. 下载iceberg-spark-runtime-xxx.jar。
  2. 将iceberg-spark-runtime-xxx.jar复制到${SPARK_HOME}/jars

创建Spark Catalog

您可以根据自身业务环境选择使用HMS或者Hadoop提供Catalog。

选项一:使用HMS(Hive MetaStore Service)提供Catalog

  1. 部署HMS,推荐您使用远程模式部署。
  2. 配置HMS和OBS。

    执行以下命令,进入配置文件编辑页面:

    vim ${SPARK_HOME}/conf/spark-defaults.conf

    在配置文件中写入以下配置项:

    spark.sql.catalog.hive_prod = org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.hive_prod.type = hive
    spark.sql.catalog.hive_prod.uri = thrift://jtc-vm:9083
    spark.sql.catalog.hive_prod.warehouse = obs://jtc-pfs001/warehouse/spark-iceberg

    其中uri参数为HMS服务的URI,warehouse参数为OBS桶内目录的路径,您需要结合自身的业务和环境进行配置。

    修改完成后,按“Esc”,输入:wq保存并退出文件编辑。

  3. 启动spark-sql,命令如下:

    ${SPARK_HOME}/bin/spark-sql

  4. 启动成功后,指定catalog,命令如下:

    use hive_prod;

  5. 创建数据库和表,命令如下:

    CREATE DATABASE db_xxx;
    use db_xxx;
    CREATE TABLE tbl_xxx(...);

选项二:使用Hadoop提供Catalog

  1. 配置Hadoop和OBS。

    执行以下命令,进入配置文件编辑页面:

    vim ${SPARK_HOME}/conf/spark-defaults.conf

    在配置文件中写入以下配置项:

    spark.sql.catalog.hadoop_prod = org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.hadoop_prod.type = hadoop
    spark.sql.catalog.hadoop_prod.warehouse = obs://jtc-pfs001/warehouse/spark-iceberg-hadoop-prod

    其中warehouse参数为OBS桶内目录的路径,您需要结合自身的业务和环境进行配置。

    修改完成后,按“Esc”,输入:wq保存并退出文件编辑。

  2. 启动spark-sql,命令如下:

    ${SPARK_HOME}/bin/spark-sql

  3. 启动成功后,指定Catalog,命令如下:

    use hadoop_prod;

  4. 创建数据库和表,命令如下:

    CREATE DATABASE db_xxx;
    use db_xxx;
    CREATE TABLE tbl_xxx(...);

相关文档