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

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

将 Iceberg 集群与 Trino 结合使用

从亚马逊EMR版本 6.6.0 开始,你可以将 Iceberg 与 Trino 集群一起使用。

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

创建 Iceberg 集群

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

  1. 创建 iceberg.properties 文件,然后为您选择的目录设置一个值。例如,假设您想将 Hive 元存储作为目录使用,则您的文件应包含以下内容。

    connector.name=iceberg hive.metastore.uri=thrift://localhost:9083

    如果您想使用 Amazon Glue 数据目录作为存储,则您的文件应包含以下内容。

    connector.name=iceberg iceberg.catalog.type=glue
  2. 创建一个会将 iceberg.properties 从 Amazon S3 复制到 /etc/trino/conf/catalog/iceberg.properties 的引导操作,如下例所示。有关引导操作的信息,请参阅 创建引导操作以安装其他软件

    set -ex sudo aws s3 cp s3://amzn-s3-demo-bucket/iceberg.properties /etc/trino/conf/catalog/iceberg.properties
  3. 使用以下配置创建一个集群,将示例引导操作脚本路径和密钥名称替换为您自己的值。

    aws emr create-cluster --release-label emr-6.7.0 \ --applications Name=Trino \ --region us-east-1 \ --name My_Trino_Iceberg_Cluster \ --bootstrap-actions '[{"Path":"s3://amzn-s3-demo-bucket","Name":"Add iceberg.properties"}]' \ --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;