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

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

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

Amazon Glue 是一项完全托管式提取、转换和加载(ETL)服务,使您能够轻松且经济高效地对数据进行分类、清理和扩充,并在各种数据存储之间可靠地移动数据。Amazon Glue 数据目录跨各种数据源和数据格式提供统一的元数据存储库,从而不仅与 Amazon EMR 集成,还与 Amazon RDS、Amazon Redshift、Redshift Spectrum、Athena 以及任何与 Apache Hive 元存储兼容的应用程序集成。AmazonGlue 爬网程序能够自动从 Amazon S3 源数据推断架构,从而将关联的元数据存储在数据目录中。有关数据目录的更多信息,请参阅《Amazon Glue 开发人员指南》中的填充 Amazon Glue 数据目录

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

重要

如果您在 2017 年 8 月 14 日之前使用 Amazon Athena 或 Amazon Redshift Spectrum 创建了表,则数据库和表将存储在 Athena 托管式目录中,该目录与 Amazon Glue 数据目录相互独立。要将 Amazon EMR 与这些表集成,您必须升级到 Amazon 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账户中制定数据目录。在使用控制台时,您可以使用 Advanced Options (高级选项)Quick Options (快速选项) 指定数据目录。

使用控制台指定 Amazon Glue 数据目录作为默认 Hive 元存储

  1. 通过以下链接打开 Amazon EMR 控制台:https://console.aws.amazon.com/elasticmapreduce/

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

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

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

使用配置分类指定 Amazon Glue 数据目录作为默认 Hive 元存储

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

Amazon EMR 5.16.0 及更高版本

  • hive.metastore 属性设置为 glue,如以下 JSON 示例所示。

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

    要在其他Amazon账户中指定数据目录,请添加 hive.metastore.glue.catalogid 属性,如以下 JSON 示例所示。将 acct-id 替换为数据目录的Amazon账户。使用另一Amazon账户中的不适用于 Amazon EMR 版本 5.15.0 及更早版本的数据目录。

    [ { "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 数据目录对象启用加密,还必须允许该角色加密、解密和生成用于加密的Amazon KMS key。

适用于 Amazon Glue 操作的权限

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

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

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

  • 您使用 Amazon Glue 的托管式密钥启用 Amazon Glue Data Catalog 对象的加密。

  • 您使用的是同一Amazon Web Services 账户的集群,其作为 AmazonGlue Data Catalog。

否则,您必须将以下语句添加到附加到 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 数据目录加密的更多信息,请参阅《Amazon Glue 开发人员指南》中的加密您的数据目录

基于资源的权限

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

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

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

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

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

在使用 Amazon Glue 数据目录作为 Presto 的元存储时,请考虑以下项目:

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

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

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

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

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