View a markdown version of this page

使用 AWS 在亚马逊 EMR 上使用 Spark 粘贴数据目录 - Amazon EMR

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

使用 AWS 在亚马逊 EMR 上使用 Spark 粘贴数据目录

使用 Amazon EMR 版本 5.8.0 或更高版本,您可以将 Spark 配置为使用 AWS Glue 数据目录作为其 Apache Hive 元数据库。当您需要持久的 Hive 元数据仓或由不同的集群、服务、应用程序或账户共享的 Hive 元数据仓时,我们建议使用此配置。 AWS

使用亚马逊 EMR 版本 6.5.0 或更高版本,您可以将 Spark 配置为在 Apache Iceberg 中 AWS 使用 Glue 数据目录。

使用亚马逊 EMR 版本 7.5.0 或更高版本,您可以将 Spark 配置为使用 AWS Glue 数据目录作为其 Iceberg REST 目录。

AWS Glue 是一项完全托管的提取、转换和加载 (ETL) 服务,它使您可以简单且经济高效地对数据进行分类、清理、丰富数据并在各种数据存储之间可靠地移动数据。 AWS Glue 数据目录提供了涵盖各种数据源和数据格式的统一元数据存储库,与亚马逊 EMR 以及亚马逊 RDS、亚马逊 Redshift、Redshift Spectrum、Athena 以及任何与 Apache Hive 元存储库兼容的应用程序集成。 AWS Glue 爬虫可以自动从 Amazon S3 中的源数据推断出架构,并将相关的元数据存储在数据目录中。有关数据目录的更多信息,请参阅 Glue 开发人员指南中的填充 AWS AWS Glue 数据目录。

Glue 需要单独收 AWS 费。在数据目录中存储和访问元数据采用月费率,Gl AWS ue ETL 任务和爬虫运行时按小时费率按分钟计费,为每个预置的开发终端节点按分钟计费。数据目录让您最多可免费存储一百万个对象。如果您存储一百万个以上的对象,将需要为超过一百万的每 100,000 个对象支付 1 美元。数据目录中的对象为表、分区或数据库。有关更多信息,请参阅 Glue 定价

重要

如果您在 2017 年 8 月 14 日之前使用亚马逊 Athena 或 Amazon Redshift Spectrum 创建了表,则数据库和表将存储在与 AWS Glue 数据 Athena-managed 目录分开的目录中。要将 Amazon EMR 与这些表格集成,您必须升级到 AWS Glue 数据目录。有关更多信息,请参阅《亚马逊 Athena 用户 AWS 指南中的 “升级到 Glue 数据目录”。

正在指定 AWS 将数据目录粘贴为 Apache Hive 元数据仓库

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

注意

齐柏林飞艇也提供 AWS 使用 Glue 数据目录的选项,因为齐柏林飞艇安装了 Spark 组件。

Console
要指定 AWS 使用新控制台将数据目录粘贴为 Apache Hive 元数据仓库
  1. 登录并打开 Amazon EMR 控制台 AWS 管理控制台,网址为https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 Amazon EMR on EC2 下,选择集群,然后选择创建集群

  3. Application bundle(应用程序包)下,选择 SparkCustom(自定义)。如果您自定义集群,请确保选择 Zeppelin 或 Spark 作为应用程序之一。

  4. AWS Glue Data Catalog s设置下,选择用于 Spark 表元数据复选框。

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

  6. 要启动集群,选择 Create cluster(创建集群)。

AWS CLI
要指定 AWS 使用粘贴数据目录作为 Apache Hive 元数据仓库 AWS CLI

有关使用 AWS CLI 和 Amazon EMR API 指定配置分类的更多信息,请参阅配置应用程序

  • 使用 spark-hive-site 分类指定 hive.metastore.client.factory.class 的值,如下例所示:

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

    要在不同的 AWS 账户中指定数据目录,请添加该hive.metastore.glue.catalogid属性,如以下示例所示。将 acct-id 替换为数据目录的 AWS 账户。

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

正在指定 AWS 将数据目录粘贴为 Apache Iceberg 目录

您可以使用、或亚马逊 EMR API 或在 Spark 会话运行时配置中将 G AWS lue 数据目录指定为 Apache Iceberg 目录实现或 Apache Iceberg REST 目录终端节点。 AWS 管理控制台 AWS CLI在使用 CLI 或 API 时,您可以使用 Spark 的配置分类指定数据目录。有关更多详细信息,请参阅将 Glue 数据 AWS 目录指定为 Apache Iceberg 目录

IAM 权限

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

的权限 AWS 胶水动作

如果使用适用于 Amazon EMR 默认的 EC2 实例配置文件,则无需执行任何操作。附加到的AmazonElasticMapReduceforEC2Role托管策略EMR_EC2_DefaultRole允许所有必要的 AWS Glue 操作。但是,如果您指定自定义 EC2 实例配置文件和权限,则必须配置相应的 AWS Glue 操作。使用 AmazonElasticMapReduceforEC2Role 托管策略作为起点。如需了解更多信息,请参阅《Amazon EMR 管理指南》中的集群 EC2 实例的服务角色(EC2 实例配置文件)

加密和解密权限 AWS Glue Data Catalog

您的实例配置文件需要使用密钥加密和解密数据的权限。如果以下语句适用,您不必配置这些权限:

  • 您可以使用 AWS Glue 的托管密钥为 Gl AWS ue 数据目录对象启用加密。

  • 您使用的集群与 AWS Glue 数据目录中的集群 AWS 账户 相同。

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

有关 Glue AWS 数据目录加密的更多信息,请参阅 Glue 开发者指南中的AWS 加密数据目录。

Resource-based 权限

如果你在亚马逊 EMR 中将 AWS Glue 与 Hive、Spark 或 Presto 结合使用, AWS Glue 支持基于资源的策略来控制对数据目录资源的访问权限。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息,请参阅《AWS Glue 开发人员指南》中的 AWS Glue 资源策略

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

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

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

使用时的注意事项 AWS Glue Data Catalog

使用 AWS Glue 数据目录作为 Spark 的 Apache Hive 元数据仓库时,请考虑以下几点:

  • 当您创建表时,具有没有位置 URI 的默认数据库会导致失败。作为解决方法,请在您使用 LOCATION 时使用 s3://amzn-s3-demo-bucket1 子句指定一个存储桶位置,如 CREATE TABLE。或者,在除默认数据库之外的数据库内创建表。

  • 不支持在 Glue 中 AWS 重命名表。

  • 当您创建 Hive 表而不指定 LOCATION 时,表数据存储在通过 hive.metastore.warehouse.dir 属性指定的位置。默认情况下,这是 HDFS 中的一个位置。如果另一个集群需要访问该表,则它将失败,除非它有足够的权限访问创建该表的集群。此外,由于 HDFS 存储是暂时性的,因此如果集群终止,表数据将丢失,并且必须重新创建该表。我们建议您在使用 Glue 创建 Hive 表时LOCATION在 Amazon S3 中指 AWS 定。此外,也可以使用 hive-site 配置分类来为 hive.metastore.warehouse.dir 指定 Amazon S3 中的位置,它适用于所有 Hive 表。如果表是在 HDFS 位置创建的,并且创建该表的集群仍在运行,则可以从 G AWS lue 中将该表的位置更新为 Amazon S3。有关更多信息,请参阅《Glue 开发者指南》中的 “在 AWS Glue 控制台上使用表格” AWS

  • 不支持包含引号和撇号的分区值,例如 PARTITION (owner="Doe's").

  • emr-5.31.0 及更高版本支持列统计数据

  • 不支持使用 Hive 授权。作为替代方案,可以考虑使用 AWS Glue Resource-Based 策略。有关更多信息,请参阅 Amazon EMR 访问 Glue 数据目录 AWS 使用 Resource-Based 政策。

使用 AWS Glue 数据目录作为 Spark 的 Apache Iceberg REST 目录时,请考虑以下几点: