将 Iceberg 集群与 Hive 结合使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 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 集成的所有功能,还包括亚马逊EMR添加的功能,例如在运行时自动选择支持的执行引擎(亚马逊 6.9.0 版)。EMR EKS

创建 Iceberg 集群

您可以使用 Amazon Web Services Management Console、 Amazon CLI 或 Amazon EMR API 创建安装了 Iceberg 的集群。在本教程中,您将使用在 Amazon CLI Amazon EMR 集群上使用 Iceberg。要使用控制台创建安装了 Iceberg 的集群,请按照使用 Amazon A thena、Amazon 和 Glue 构建冰山数据湖中的步骤进行操作。EMR Amazon

要将 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 e 文档HCatalog中的使用

功能支持

亚马逊 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版本中,libfb303jar 会自动符号链接到 Hive auxlib 目录。

  • 创建表

    • 非分区表 - 可以通过提供存储处理程序在 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;