本文为您演示如何在 EMR 上使 Hive、Spark、Flink 引擎支持 Iceberg 表。
开发准备
确认您已经开通了腾讯云,并且创建了一个 EMR 集群,详情参考 创建集群。
在创建 EMR 集群时在软件配置界面选择 Iceberg 组件,并按照需求勾选集成的 Spark、Hive、Flink 引擎。
Hive 集成
方式一:临时添加依赖环境
使用 Hive 命令启动 Hive,使用 add 命令添加 Hive 使用 Iceberg 依赖所需要的 jar 包:
//先启动hive引擎,在hive命令行添加依赖包hiveADD JAR {iceberg-hive-runtime};
{iceberg-hive-runtime} 是依赖 jar 包的绝对路径,jar 包位于 /usr/local/service/iceberg 目录下。
注意:
使用临时添加依赖环境的方法,每次启动 Hive 时都需要使用 add 命令添加一次依赖。
方式二:使用额外 lib 目录
将 Hive 使用 Iceberg 依赖所需要的 jar 包拷贝到 auxlib 目录:
cp {iceberg-hive-runtime} /usr/local/service/hive/auxlib
将 Iceberg 依赖添加至 Hive 中之后,再启动 Hive 即可使用 Iceberg 表格。
Spark 集成
将 Spark 使用 Iceberg 依赖所需要的 jar 包拷贝到 jars 目录:
cp {iceberg-spark-runtime} /usr/local/service/spark/jars
{iceberg-spark-runtime} 是依赖 jar 包的绝对路径,jar 包位于 /usr/local/service/iceberg 目录下。
使用以下命令启动支持 Iceberg 表的 Spark sql 命令行:
spark-sql --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 \\
将 Iceberg 配置写入配置文件
可以通过将 Iceberg 配置写入配置文件的方式,让 Spark sql 默认支持 Iceberg。
进入EMR控制台,点击 集群服务 > SPARK > 配置管理 页面,选择 spark-defaults.conf 配置文件,新增以下参数值:
spark.sql.extensions = org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensionsspark.sql.catalog.spark_catalog = org.apache.iceberg.spark.SparkSessionCatalogspark.sql.catalog.spark_catalog.type = hive
注意:
Flink 集成
将 Flink 使用 Iceberg 依赖所需要的 jar 包拷贝到 auxlib 目录。
cp {iceberg-flink-runtime} /usr/local/service/flink/libcp /usr/local/service/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.2.2.jar /usr/local/service/flink/lib/cp /usr/local/service/hive/lib/hive-exec-3.1.3.jar /usr/local/service/flink/lib/cp /usr/local/service/hive/lib/libfb303-0.9.3.jar /usr/local/service/flink/lib///启动支持iceberg表的flink sql命令行./bin/sql-client.sh embedded shell
{iceberg-flink-runtime} 是依赖 jar 包的绝对路径,jar 包位于 /usr/local/service/iceberg 目录下。
{hadoop-mapreduce-client-core-3.2.2.jar}、{hive-exec-3.1.3.jar}、{libfb303-0.9.3.jar}三个 jar 包需要更改为对应的版本。