Hive 访问 Iceberg 数据

最近更新时间:2024-02-27 14:30:32

我的收藏

开发准备

确认您已经开通了腾讯云,并且创建了一个 EMR 集群,详情参考创建集群
在创建 EMR 集群时在软件配置界面选择 Hive、Spark、Iceberg 组件。

通过 spark 创建 Iceberg 表

登录 Master 节点并切换 hadoop 用户,执行以下命令启动 SparkSQL:
spark-sql --master local[*] --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.local.type=hadoop --conf spark.sql.catalog.local.warehouse=/usr/hive/warehouse --jars /usr/local/service/iceberg/iceberg-spark-runtime-3.2_2.12-0.13.0.jar

说明:
Iceberg 相关的包放置在 /usr/local/service/iceberg/ 目录下,--jars 使用的依赖包版本在不同 EMR 版本中可能存在差异,请查看并使用正确的依赖包。
建表:
spark-sql> CREATE TABLE local.default.t1 (id int, name string) USING iceberg;
Time taken: 2.752 seconds
插入数据:
spark-sql> INSERT INTO local.default.t1 values(1, "tom");
Time taken: 2.71 seconds
查询数据:
spark-sql> SELECT * from local.default.t1;
1 tom
Time taken: 0.558 seconds, Fetched 1 row(s)

通过 Hive 查看 Iceberg 数据

登录 Master 节点并切换 hadoop 用户,执行以下命令连接 Hive:
hive
添加 Iceberg 依赖包:
hive> add jar /usr/local/service/iceberg/iceberg-hive-runtime-0.13.0.jar;
创建外部表:
hive> CREATE EXTERNAL TABLE t1
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION '/usr/hive/warehouse/default/t1'
TBLPROPERTIES ('iceberg.catalog'='location_based_table');
查询 t1 表记录数:
hive> select count(*) from t1;
OK
1
Time taken: 26.255 seconds, Fetched: 1 row(s)