将 Presto 与 Glue 数据 Amazon 目录配合使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Presto 与 Glue 数据 Amazon 目录配合使用

使用亚马逊 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 数据目录

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

重要

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

将 Amazon Glue 数据目录指定为元数据库

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

New console
使用新主机 Amazon 将 Glue 数据目录指定为 Hive 元数据仓库
  1. 登录并打开亚马逊 EMR 控制台,网址为 https://console.aws.amazon.com/emr。 Amazon Web Services Management Console

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

  3. Application bundle(应用程序包)下,选择 Presto

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

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

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

Old console
将 Glue Amazon 数据目录指定为使用旧控制台的默认 Presto 元数据仓
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 依次选择 Create cluster (创建集群)Go to advanced options (转到高级选项)

  3. Software Configuration 下,选择版本 emr-5.10-0 或更高版本并选择 Presto

  4. 选择 Use for Presto table metadata,选择 Next,然后完成适合您的应用程序的集群的其他设置。

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

有关如何在创建集群时指定以下配置分类的示例,请参阅配置应用程序

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 权限

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

Amazon Glue 操作的权限

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

加密和解密 Amazon Glue 数据目录的权限

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

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

  • 您使用的集群与 Gl Amazon ue 数据目录 Amazon Web Services 账户 相同。

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

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

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

基于资源的权限

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

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

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

账号 ID 可以与 G Amazon lue 账号 ID 不同。这允许从不同账户中的 EMR 集群进行访问。您可以指定多个委托人,且每个委托人都可以来自不同的账户。

使用 Amazon Glue 数据目录时的注意事项

在 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 上使用表格”。

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

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

  • 不支持使用 Hive 授权。作为替代方案,考虑使用基于Amazon Glue 资源的策略。有关更多信息,请参阅使用基于资源的策略获得 Amazon EMR 访问 Glue Amazon 数据目录。