将 Iceberg 集群与 Trino 结合使用 - Amazon EMR

将 Iceberg 集群与 Trino 结合使用

从 Amazon EMR 版本 6.6.0 开始,您可以将 Iceberg 用于您的 Trino 集群。

在本教程中,您将通过 AWS CLI 在 Amazon EMR Trino 集群上使用 Iceberg。要使用控制台创建安装了 Iceberg 的集群,请按照使用 Amazon Athena、Amazon EMR 和 AWS Glue 构建 Apache Iceberg 数据湖中的步骤操作。

创建 Iceberg 集群

要在 Amazon EMR 上将 Iceberg 与 AWS CLI 结合使用,请首先按照以下步骤创建一个集群。有关使用 AWS CLI 指定 Iceberg 分类的信息,请参阅在创建集群时使用 AWS CLI 提供配置在创建集群时,使用 Java SDK 提供配置

  1. 创建包含以下内容的 configurations.json 文件。例如,假设您想将 Hive 元存储作为目录使用,则您的文件应包含以下内容。

    [ { "Classification": "trino-connector-iceberg", "Properties": { "connector.name": "iceberg", "hive.metastore.uri": "thrift://localhost:9083" } } ]

    如果您想将 AWS Glue Data Catalog 作为目录使用,则您的文件应包含以下内容。

    [ { "Classification": "trino-connector-iceberg", "Properties": { "connector.name": "iceberg", "iceberg.catalog.type": "glue" } } ]
  2. 使用以下配置创建集群,将示例 Amazon S3 存储桶路径和件名称替换为您自己的值。

    aws emr create-cluster --release-label emr-6.7.0 \ --applications Name=Trino \ --region us-east-1 \ --name My_Trino_Iceberg_Cluster \ --log-uri s3://amzn-s3-demo-bucket \ --configurations file://configurations.json \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=c3.4xlarge InstanceGroupType=CORE,InstanceCount=3,InstanceType=c3.4xlarge \ --use-default-roles \ --ec2-attributes KeyName=<key-name>

为 Iceberg 初始化 Trino 会话

要初始化 Trino 会话,请运行以下命令。

trino-cli --catalog iceberg

写入 Iceberg 表

使用以下 SQL 命令创建并写入您的表。

trino> SHOW SCHEMAS; trino> CREATE TABLE default.iceberg_table ( id int, data varchar, category varchar) WITH ( format = 'PARQUET', partitioning = ARRAY['category', 'bucket(id, 16)'], location = 's3://amzn-s3-demo-bucket/<prefix>') trino> INSERT INTO default.iceberg_table VALUES (1,'a','c1'), (2,'b','c2'), (3,'c','c3');

从 Iceberg 表读取

要从 Iceberg 表读取,请运行以下命令。

trino> SELECT * from default.iceberg_table;

将 Iceberg 与 Trino 结合使用的注意事项

  • Amazon EMR 6.5 不提供对 Iceberg 的原生 Trino Iceberg Catalog 支持。Trino 需要使用 Iceberg v0.11,因此我们建议为 Trino 启动独立于 Spark 集群的 Amazon EMR 集群,并在该集群上包括 Iceberg v0.11。

  • 使用 AWS Glue 作为 Iceberg 的目录时,请确保您在其中创建表的数据库存在于 AWS Glue 中。如果您使用的是类似 AWS Lake Formation 的服务并且无法加载目录,请确保您有访问该服务的适当权限来执行命令。

  • Iceberg Glue 集成不适用于 Redshift 托管存储目录。