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环境
- 下载iceberg-spark-runtime-xxx.jar。
- 将iceberg-spark-runtime-xxx.jar复制到${SPARK_HOME}/jars
创建Spark Catalog
您可以根据自身业务环境选择使用HMS或者Hadoop提供Catalog。
选项一:使用HMS(Hive MetaStore Service)提供Catalog
- 部署HMS,推荐您使用远程模式部署。
- 配置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保存并退出文件编辑。
- 启动spark-sql,命令如下:
${SPARK_HOME}/bin/spark-sql
- 启动成功后,指定catalog,命令如下:
use hive_prod;
- 创建数据库和表,命令如下:
CREATE DATABASE db_xxx; use db_xxx; CREATE TABLE tbl_xxx(...);
选项二:使用Hadoop提供Catalog
- 配置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保存并退出文件编辑。
- 启动spark-sql,命令如下:
${SPARK_HOME}/bin/spark-sql
- 启动成功后,指定Catalog,命令如下:
use hadoop_prod;
- 创建数据库和表,命令如下:
CREATE DATABASE db_xxx; use db_xxx; CREATE TABLE tbl_xxx(...);