

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

# 将 Iceberg 集群与 Trino 结合使用
<a name="emr-iceberg-use-trino-cluster"></a>

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

在本教程中，您将使用在 Amazon EMR Trino 集群上使用 Iceberg。 AWS CLI 要使用控制台创建安装了 Iceberg 的集群，请按照[使用 Amazon Athena、Amazon EMR 和 AWS Glue 构建 Apache Iceberg 数据湖](https://aws.amazon.com/blogs//big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/)中的步骤操作。

## 创建 Iceberg 集群
<a name="emr-iceberg-create-cluster-trino"></a>

要将 Amazon EMR 上的 Iceberg 与一起 AWS CLI使用，请先按照以下步骤创建一个集群。有关使用指定 Iceberg 分类的信息 AWS CLI，请参阅[创建集群 AWS CLI 时使用提供配置](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-cli)或[在创建集群时，使用 Java SDK 提供配置](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-sdk)。

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

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

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

   ```
   [
     {
       "Classification": "trino-connector-iceberg",
       "Properties": {
         "connector.name": "iceberg",
         "iceberg.catalog.type": "glue"
       }
     }
   ]
   ```

   从 Amazon EMR 7.7.0 开始，包括房产 *fs.native-s3.enabled=true*

   ```
   [
     { 
       "Classification": "trino-connector-iceberg",
       "Properties": {
         "connector.name": "iceberg",
         "iceberg.catalog.type": "glue",
         "fs.native-s3.enabled": "true"
       }           
     }                 
   ]
   ```

1. 使用以下配置创建集群，将示例 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 会话
<a name="emr-iceberg-initialize-trino"></a>

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

```
trino-cli --catalog iceberg
```

## 写入 Iceberg 表
<a name="emr-iceberg-write-to-table-trino"></a>

使用以下 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 表读取
<a name="emr-iceberg-read-from-table-trino"></a>

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

```
trino> SELECT * from default.iceberg_table;
```

## 将 Iceberg 与 Trino 结合使用的注意事项
<a name="trino-considerations"></a>
+ Amazon EMR 6.5 不提供对 Iceberg 的原生 Trino Iceberg Catalog 支持。Trino 需要使用 Iceberg v0.11，因此我们建议为 Trino 启动独立于 Spark 集群的 Amazon EMR 集群，并在该集群上包括 Iceberg v0.11。
+ 使用 AWS Glue 作为 Iceberg 的目录时，请确保要在其中创建表的数据库存在于 Glue 中 AWS 。如果您正在使用诸如的服务 AWS Lake Formation ，但无法加载目录，请确保您拥有对服务的正确访问权限以执行命令。
+ Iceberg Glue 集成不适用于 Redshift 托管存储目录。