

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

# 将 Presto 与 Glue 数据 Amazon 目录配合使用
<a name="emr-presto-glue"></a>

使用亚马逊 EMR 发行版 5.10.0 及更高版本，您可以将 Glue 数据目录指定为 Prest Amazon o 的默认 Hive 元数据库。当您需要持久性的元数据存储或由不同集群、服务、应用程序和 Amazon Web Services 账户共享的元数据存储时，我们建议使用此配置。

Amazon Glue 是一项完全托管的提取、转换和加载 (ETL) 服务，它使对数据进行分类、清理、丰富数据并在各种数据存储之间可靠地移动数据变得简单且经济高效。 Amazon Glue 数据目录提供了一个跨各种数据源和数据格式的统一元数据存储库，与亚马逊 EMR 以及亚马逊 RDS、Amazon Redshift、Redshift Spectrum、Athena 以及任何与 Apache Hive 元数据仓兼容的应用程序集成。 Amazon Glue 爬网程序可以自动从 Amazon S3 中的源数据推断出架构，并将相关的元数据存储在数据目录中。有关数据目录的更多信息，请参阅 [Amazon Glue *开发者指南中的填充 G Amazon l* ue 数据目录](https://docs.amazonaws.cn/glue/latest/dg/populate-data-catalog.html)。

Glue 需单独收 Amazon 费。在数据目录中存储和访问元数据有月费率，Gl Amazon ue ETL 作业和爬虫运行时按小时费率收费，每个预配置的开发端点按每分钟计费。数据目录让您最多可免费存储一百万个对象。如果您存储一百万个以上的对象，将需要为超过一百万的每 100,000 个对象支付 1 美元。数据目录中的对象为表、分区或数据库。有关更多信息，请参阅 [Glue 定价](https://www.amazonaws.cn/glue/pricing)。

**重要**  
如果您在 2017 年 8 月 14 日之前使用 Amazon Athena 或 Amazon Redshift Spectrum 创建了表，则数据库和表将存储在雅典娜管理的目录中，该目录与 Glue 数据目录是分开的。 Amazon 要将 Amazon EMR 与这些表集成，您必须升级到 Glue 数据 Amazon 目录。有关更多信息，请参阅*亚马逊 Athena Amazon 用户指南中的升级到 Glue* [数据目录](https://docs.amazonaws.cn/athena/latest/ug/glue-upgrade.html)。

## 将 Amazon Glue 数据目录指定为元数据库
<a name="emr-presto-glue-configure"></a>

您可以使用 Amazon Web Services 管理控制台、 Amazon CLI或 Amazon EMR API 将 Amazon Glue 数据目录指定为元数据库。在使用 CLI 或 API 创建集群时，您可以使用 Presto 配置分类指定数据目录。此外，在 Amazon EMR 5.16.0 及更高版本中，您可以使用配置分类在不同的目录中指定数据目录。 Amazon Web Services 账户在使用控制台时，您可以使用 **Advanced Options (高级选项)** 或 **Quick Options (快速选项)** 指定数据目录。

------
#### [ Console ]

**使用新主机 Amazon 将 Glue 数据目录指定为 Hive 元数据仓库**

1. [登录 Amazon Web Services 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.amazonaws.cn/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择 **Create cluster**（创建集群）。

1. 在 **Application bundle**（应用程序包）下，选择 **Presto**。

1. 在**Amazon Glue Data Catalog 设置**下，选择**用于 Presto 表元数据**复选框。

1. 选择适用于集群的任何其他选项。

1. 要启动集群，选择 **Create cluster**（创建集群）。

------
#### [ CLI ]

**要将 Glue Amazon 数据目录指定为默认 Hive 元数据仓库，请使用 Amazon CLI**

有关如何在创建集群时指定以下配置分类的示例，请参阅[配置应用程序](emr-configure-apps.md)。

**Amazon EMR 5.16.0 及更高版本**
+ 将 `hive.metastore` 属性设置为 `glue`，如以下 JSON 示例所示。

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore": "glue"
      }
    }
  ]
  ```

  要在不同的数据目录中指定数据目录 Amazon Web Services 账户，请添加`hive.metastore.glue.catalogid`属性，如以下 JSON 示例所示。将 `{{acct-id}}` 替换为数据目录的 Amazon 账户。Amazon EMR 版本 5.15.0 及更早版本不支持使用其他 Amazon Web Services 账户 中的数据目录。

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore": "glue",
        "hive.metastore.glue.catalogid": "{{acct-id}}"
      }
    }
  ]
  ```

  **Amazon EMR 5.10.0 至 5.15.0**

  将 `hive.metastore.glue.datacatalog.enabled` 属性设置为 `true`，如以下 JSON 示例所示：

  ```
  [
    {
      "Classification": "presto-connector-hive",
      "Properties": {
        "hive.metastore.glue.datacatalog.enabled": "true"
      }
    }
  ]
  ```

  **Amazon EMR 6.1.0 及更高版本使用 PrestoSQL (Trino)**

  从 EMR 版本 6.1.0 起，PrestoSQL 还支持 Glue 作为默认配置 Hive 元存储。为此，请使用 `prestosql-connector-hive` 配置分类将 `hive.metastore` 属性设置为 `glue`，如以下 JSON 示例所示。

  Amazon EMR 6.4.0 及更高版本使用新名称 Trino 而不是 PrestoSQL。如果您使用 Trino，请在以下配置分类中将 `{{prestosql-connector-hive}}` 替换为 `trino-connector-hive`。

  ```
  [
    {
      "Classification": "{{prestosql-connector-hive}}",
      "Properties": {
        "hive.metastore": "glue"
      }
    }
  ]
  ```

要在长时间运行的集群上切换元存储，您可以连接到主节点，直接编辑 `/etc/presto/conf/catalog/hive.properties` 文件中的属性值并重新启动 Presto 服务器（`sudo restart presto-server`），以便为您的发行版相应地手动设置这些值。如果将此方法与 Amazon EMR 5.15.0 及更高版本结合使用，请确保将 `hive.table-statistics-enabled` 设置为 `false`。在使用发行版 5.16.0 和更高版本时，不需要使用该设置；但不支持表和分区统计信息。

------

## IAM 权限
<a name="emr-hive-glue-permissions"></a>

集群的 EC2 实例配置文件必须具有 Amazon Glue 操作的 IAM 权限。此外，如果您为 Amazon Glue Data Catalog 对象启用加密，则还必须允许该角色加密、解密和生成 Amazon KMS key 用于加密的对象。

### Amazon Glue 操作的权限
<a name="emr-hive-glue-permissions-actions"></a>

如果使用适用于 Amazon EMR 默认的 EC2 实例配置文件，则无需执行任何操作。附加到的`AmazonElasticMapReduceforEC2Role`托管策略`EMR_EC2_DefaultRole`允许执行所有必要的 Amazon Glue 操作。但是，如果您指定自定义 EC2 实例配置文件和权限，则必须配置相应的 Amazon Glue 操作。使用 `AmazonElasticMapReduceforEC2Role` 托管策略作为起点。如需了解更多信息，请参阅*《Amazon EMR 管理指南》*中的[集群 EC2 实例的服务角色（EC2 实例配置文件）](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)。

### 加密和解密 Amazon Glue 数据目录的权限
<a name="emr-hive-glue-permissions-encrypt"></a>

您的实例配置文件需要使用密钥加密和解密数据的权限。如果以下语句适用，您*不必*配置这些权限：
+ 您可以使用 Glue 的 Amazon 托管密钥为 Glue 数据目录对象启用加密。 Amazon 
+ 您使用的集群与 Gl Amazon ue 数据目录 Amazon Web Services 账户 相同。

否则，您必须将以下语句添加到附加到 EC2 实例配置文件的权限策略。

有关 Amazon Glue 数据目录加密的更多信息，请参阅 Glu [e *开发者指南中的Amazon 加密*数据目录](https://docs.amazonaws.cn/glue/latest/dg/encrypt-glue-data-catalog.html)。

### 基于资源的权限
<a name="emr-hive-glue-permissions-resource"></a>

如果您在 Amazon EMR 中将 Amazon Glue 与 Hive、Spark 或 Presto 结合使用， Amazon Glue 支持基于资源的策略来控制对数据目录资源的访问。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息，请参阅《Amazon Glue 开发人员指南》**中的 [Amazon Glue 资源策略](https://docs.amazonaws.cn/glue/latest/dg/glue-resource-policies.html)。

使用基于资源的策略限制从 Amazon EMR 中访问 Amazon Glue 时，您在权限策略中指定的委托人必须是与创建集群时指定的 EC2 实例配置文件关联的角色 ARN。例如，对于附加到目录的基于资源的策略，您可以使用以下示例所示的格式为集群 EC2 实例{{EMR\_EC2\_DefaultRole}}的默认服务角色指定角色 ARN，如下所示：`Principal`

```
arn:aws:iam::{{acct-id}}:role/{{EMR_EC2_DefaultRole}}
```

{{acct-id}}可以与 Glue 账 Amazon 号 ID 不同。这允许从不同账户中的 EMR 集群进行访问。您可以指定多个委托人，且每个委托人都可以来自不同的账户。

## 使用 Amazon Glue 数据目录时的注意事项
<a name="emr-presto-glue-knownissues"></a>

在 Presto 中使用 Amazon Glue 数据目录作为元数据仓时，请考虑以下事项：
+ 不支持在 Amazon Glue 中重命名表。
+ 当您创建 Hive 表而不指定 `LOCATION` 时，表数据存储在通过 `hive.metastore.warehouse.dir` 属性指定的位置。默认情况下，这是 HDFS 中的一个位置。如果另一个集群需要访问该表，则它将失败，除非它有足够的权限访问创建该表的集群。此外，由于 HDFS 存储是暂时性的，因此如果集群终止，表数据将丢失，并且必须重新创建该表。我们建议您在使用 Amazon Glue 创建 Hive 表时`LOCATION`在 Amazon S3 中指定。此外，也可以使用 `hive-site` 配置分类来为 `hive.metastore.warehouse.dir` 指定 Amazon S3 中的位置，它适用于所有 Hive 表。如果在 HDFS 位置创建了表，并且创建该表的集群仍在运行，则可以从 Glue 中将该表的位置更新为 Amazon S3 Amazon 。有关更多信息，请参阅[《Glue *开发者指南》中的 “在 Amazon Glue 控制台Amazon 上*使用表格](https://docs.amazonaws.cn/glue/latest/dg/console-tables.html)”。
+ 不支持包含引号和撇号的分区值，例如 `PARTITION (owner="Doe's").`
+ emr-5.31.0 及更高版本支持[列统计数据](https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ColumnStatistics)。
+ 不支持使用 [Hive 授权](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization)。作为替代方案，考虑使用[基于Amazon Glue 资源的策略](https://docs.amazonaws.cn/glue/latest/dg/glue-resource-policies.html)。有关更多信息，请参阅[使用基于资源的策略获得 Amazon EMR 访问 Glue Amazon 数据目录。](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-iam-roles-glue.html)