

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

# 在亚马逊 EMR 上使用 Amazon Glue 数据目录和 Spark
<a name="emr-spark-glue"></a>

使用亚马逊 EMR 版本 5.8.0 或更高版本，您可以将 Spark 配置为使用 Glue 数据目录作为其 Apach Amazon e Hive 元数据库。如果您需要由不同集群、服务、应用程序或账户共享的永久 Hive 元数据仓或 Hive 元数据仓，我们建议您使用此配置。 Amazon 

使用 Amazon EMR 版本 6.5.0 或更高版本，您可以将 Spark 配置为在 Apache Iceberg 中使用 Amazon Glue 数据目录。

使用 Amazon EMR 版本 7.5.0 或更高版本，您可以将 Spark 配置为使用 G Amazon lue 数据目录作为其 Iceberg REST 目录。

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 数据目录指定为 Apache Hive 元数据仓
<a name="emr-spark-glue-configure"></a>

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

**注意**  
齐柏林飞艇还提供使用 Amazon Glue Data Catalog 的选项，因为齐柏林飞艇安装了 Spark 组件。

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

**使用新控制台 Amazon 将 Glue 数据目录指定为 Apache Hive 元数据仓库**

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

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

1. 在 **Application bundle**（应用程序包）下，选择 **Spark** 或 **Custom**（自定义）。如果您自定义集群，请确保选择 Zeppelin 或 Spark 作为应用程序之一。

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

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

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

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

**要将 Glue Amazon 数据目录指定为 Apache Hive 元数据仓库 Amazon CLI**

有关使用 Amazon CLI 和 Amazon EMR API 指定配置分类的更多信息，请参阅。[配置应用程序](emr-configure-apps.md)
+ 使用 `spark-hive-site` 分类指定 `hive.metastore.client.factory.class` 的值，如下例所示：

  ```
  [
    {
      "Classification": "spark-hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
      }
    }
  ]
  ```

  要在其他 Amazon 账户中指定数据目录，请添加`hive.metastore.glue.catalogid`属性，如以下示例所示。将 `{{acct-id}}` 替换为数据目录的 Amazon 账户。

  ```
  [
    {
      "Classification": "spark-hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.glue.catalogid": "{{acct-id}}"
      }
    }
  ]
  ```

------

## 将 Amazon Glue 数据目录指定为 Apache 冰山目录
<a name="emr-spark-glue-configure-iceberg"></a>

你可以使用、、或 Amazon EMR API 或 Spark 会话运行时配置将 Amazon Glue 数据目录指定为 Apache Iceberg 目录实现 Amazon CLI或 Apache Iceberg REST 目录终端节点。 Amazon Web Services 管理控制台在使用 CLI 或 API 时，您可以使用 Spark 的配置分类指定数据目录。有关更多详细信息，请参阅[将 Amazon Glue 数据目录指定为 Apache Iceberg](https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-spark-glue.html#emr-spark-glue-configure-iceberg) 目录。

## 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-hive-glue-considerations-hive"></a>

使用 Amazon Glue 数据目录作为带有 Spark 的 Apache Hive 元数据仓时，请考虑以下事项：
+ 当您创建表时，具有没有位置 URI 的默认数据库会导致失败。作为解决方法，请在您使用 `LOCATION` 时使用 `s3://{{amzn-s3-demo-bucket1}}` 子句指定一个存储桶位置，如 `CREATE TABLE`。或者，在除默认数据库之外的数据库内创建表。
+ 不支持在 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)

使用 Amazon Glue 数据目录作为带有 Spark 的 Apache Iceberg REST 目录时，请考虑以下几点：
+ 如果您将 Spark 会话目录与 Iceberg 结合使用（如[使用 Iceberg 和 Iceberg SparkCatalog 时的配置差异 SparkSessionCatalog](emr-iceberg-use-spark-cluster.md#emr-iceberg-spark-catalog)中所述），则除了将 Amazon Glue Data Catalog 配置为 Apache Iceberg REST 目录之外，还必须将 Amazon Glue Data Catalog 配置为 Apache Hive 元存储。
+  Amazon Glue Data Catalog IRC 端点仅支持 Amazon Sigv4 身份验证方案。 OAuth 不支持。对于 OAuth 用户，请使用 IAM 身份中心配置访问权限。请参阅[将 Lake Formation 与 IAM Identity Center 连接](https://docs.amazonaws.cn/lake-formation/latest/dg/connect-lf-identity-center.html)。
+  Amazon Glue Iceberg REST 目录并不支持开源中的所有操作。