本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Iceberg 集群与 Hive 结合使用
在 Amazon 6.9.0 及更高EMR版本中,您可以将 Iceberg 与 Hive 集群配合使用,而无需执行开源 Iceberg Hive 集成所需的设置步骤。对于 Amazon 6.8.0 及更早EMR版本,您可以使用引导操作安装 iceberg-hive-runtime
jar 来配置 Hive 以支持 Iceberg。
亚马逊 EMR 6.9.0 包含 Hive 3.1.3 与 Iceberg 0.14.1 集成
创建 Iceberg 集群
您可以使用 Amazon Web Services Management Console、 Amazon CLI 或 Amazon EMR API 创建安装了 Iceberg 的集群。在本教程中,您将使用在 Amazon CLI Amazon EMR 集群上使用 Iceberg。要使用控制台创建安装了 Iceberg 的集群,请按照使用 Amazon A thena、Amazon 和 Glue 构建冰山数据湖
要将 Amazon 上的 Iceberg EMR 与一起使用 Amazon CLI,请先按照以下步骤创建一个集群。有关使用 Amazon CLI 或 Java 指定 Iceberg 分类的信息SDK,请参阅创建集群 Amazon CLI 时使用提供配置或创建集群SDK时使用 Java 提供配置。使用以下内容创建名为 configurations.json
的文件:
[{ "Classification":"iceberg-defaults", "Properties":{"iceberg.enabled":"true"} }]
接下来,使用以下配置创建集群,将示例 Amazon S3 桶路径和子网 ID 替换为您自己的值:
aws emr create-cluster --release-label emr-6.9.0 \ --applications Name=Hive \ --configurations file://iceberg_configurations.json \ --region us-east-1 \ --name My_hive_Iceberg_Cluster \ --log-uri s3://
amzn-s3-demo-bucket
/ \ --instance-type m5.xlarge \ --instance-count 2 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef
Hive Iceberg 集群执行以下操作:
-
在 Hive 中加载 Iceberg Hive 运行时 jar 并为 Hive 引擎启用 Iceberg 相关配置。
-
启用 Amazon EMR Hive 的动态执行引擎选择,以防止用户为兼容 Iceberg 而设置支持的执行引擎。
注意
Hive Iceberg 集群目前不支持 Glue Amazon 数据目录。默认 Iceberg 目录为 HiveCatalog
,它对应于为 Hive 环境配置的元存储。有关目录管理的更多信息,请参阅 Apache Hiv
功能支持
亚马逊 EMR 6.9.0 支持 Hive 3.1.3 和 Iceberg 0.14.1。该功能支持仅限于 Hive 3.1.2 和 3.1.3 的 Iceberg 兼容功能。支持以下命令:
-
在亚马逊EMR发布6.9.0至6.12.x版本时,您必须将
libfb303
jar包含在Hive目录中。auxlib
使用以下命令将其包含在内:sudo /usr/bin/ln -sf /usr/lib/hive/lib/libfb303-*.jar /usr/lib/hive/auxlib/libfb303.jar
在 Amazon 6.13 及更高EMR版本中,
libfb303
jar 会自动符号链接到 Hiveauxlib
目录。 -
创建表
-
非分区表 - 可以通过提供存储处理程序在 Hive 中创建外部表,如下所示:
CREATE EXTERNAL TABLE x (i int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
-
分区表 - 可以在 Hive 中创建外部分区表,如下所示:
CREATE EXTERNAL TABLE x (i int) PARTITIONED BY (j int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
注意
Hive 3 ORC/AVRO/PARQUET 不支持
STORED AS
文件格式。默认且唯一的选项是 Parquet。 -
-
删除表 -
DROP TABLE
命令用于删除表,如以下示例中所示:DROP TABLE [IF EXISTS] table_name [PURGE];
-
读取表 -
SELECT
语句可用于读取 Hive 中的 Iceberg 表,如以下示例中所示。支持的执行引擎为 MR 和 Tez。SELECT * FROM table_name
有关 Hive 的选择语法的信息,请参阅LanguageManual 选择
。有关在 Hive 中使用 Iceberg 表的选择语句的信息,请参阅 Apache Iceberg Select 。 -
插入到表中 - HiveQL 的
INSERT INTO
语句仅适用于支持 Map Reduce 执行引擎的 Iceberg 表。亚马逊EMR用户无需明确设置执行引擎,因为 Amazon EMR Hive 会在运行时为 Iceberg Tables 选择引擎。-
单表插入 - 例如:
INSERT INTO table_name VALUES ('a', 1); INSERT INTO table_name SELECT...;
-
多表插入 - 支持在语句中插入非原子多表。例如:
FROM source INSERT INTO table_1 SELECT a, b INSERT INTO table_2 SELECT c,d;
-