将 Presto 与 AWS Glue Data Catalog结合使用 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Presto 与 AWS Glue Data Catalog结合使用

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

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

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

重要

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

指定 AWS Glue Data Catalog作为元存储

您可以使用 AWS 管理控制台、AWS CLI 或 Amazon EMR API 指定 AWS Glue Data Catalog 作为元存储。在使用 CLI 或 API 时,您可以使用 Presto 的配置分类指定 Data Catalog。此外,对于 Amazon EMR 5.16.0 及更高版本,您可以使用配置分类在不同的 AWS 账户中指定一个 Data Catalog。在使用控制台时,您可以使用 Advanced Options (高级选项)Quick Options (快速选项) 指定 Data Catalog。

使用控制台指定 AWS Glue Data Catalog作为默认 Hive 元存储

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

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

  3. Software Configuration (软件配置) 下,选择Release (版本) emr-5.10-0 或更高版本并选择 Presto

  4. 选择Use for Presto table metadata (用于 Presto 表元数据),选择Next (下一步),然后完成适合您的应用程序的集群的其他设置。

使用配置分类指定 AWS Glue Data Catalog作为默认 Hive 元存储

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

Amazon EMR 5.16.0 和更高版本

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

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

    要在其他 AWS 账户中指定Data Catalog,请添加 hive.metastore.glue.catalogid 属性,如以下 JSON 示例所示。将 acct-id 替换为Data Catalog的 AWS 账户。

    [ { "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" } } ]

    使用另一 AWS 账户中的Data Catalog不适用于 Amazon EMR 版本 5.15.0 及更早版本。

要在长时间运行的集群上切换元存储,您可以连接到主节点,直接编辑 /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 实例配置文件必须具有 AWS Glue 操作的 IAM 权限。此外,如果您为 AWS Glue Data Catalog 对象启用加密,还必须允许该角色加密、解密和生成用于加密的客户主密钥 (CMK)。

适用于 AWS Glue 操作的权限

默认 AmazonElasticMapReduceforEC2Role 托管策略已附加到允许所需 AWS Glue 操作的 EMR_EC2_DefaultRole。如果使用默认的 EC2 实例配置文件,则无需执行任何操作。但是,如果您在创建集群时指定自定义 EC2 实例配置文件和权限,请确保允许相应的 AWS Glue 操作。使用 AmazonElasticMapReduceforEC2Role 托管策略作为起点。有关 AWS Glue 操作的列表,请参阅 Amazon EMR 管理指南 中的集群 EC2 实例的服务角色(EC2 实例配置文件)

加密和解密 AWS Glue Data Catalog 的权限

本节介绍有关 AWS Glue Data Catalog 的加密功能。有关 AWS Glue Data Catalog 加密的更多信息,请参阅 AWS Glue Developer Guide中的加密数据目录

如果使用适用于 AWS Glue 的 AWS 托管 CMK 为 AWS Glue Data Catalog 对象启用加密,且访问 AWS Glue Data Catalog 的集群位于相同的 AWS 账中,则无需更新附加到 EC2 实例配置文件的权限策略。如果使用客户托管 CMK,或者如果集群位于不同的 AWS 账户中,您必须更新权限策略,以使 EC2 实例配置文件有权使用该密钥进行加密和解密。无论使用的是默认权限策略 AmazonElasticMapReduceforEC2Role,还是附加到自定义 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" } ] } ]

基于资源的权限

如果您将 AWS Glue 与 Hive、Spark 或 Amazon EMR 中的 Presto 结合使用,则 AWS Glue 将支持基于资源的策略控制对 Data Catalog 资源的访问。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息,请参阅 AWS Glue Developer Guide 中的 AWS Glue 资源策略

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

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

acct-id 可能不同于 AWS Glue 账户 ID。这实现了使用不同的账户通过 EMR 集群进行访问。您可以指定多个委托人,每个委托人来自不同的账户。

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

在使用 AWS Glue Data Catalog作为 Presto 的元存储时,请考虑以下项目:

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

  • 在未指定 LOCATION 的情况下创建 Hive 表时,表数据将存储在 hive.metastore.warehouse.dir 属性所指定的位置。默认情况下,这是 HDFS 中的位置。如果另一个集群需要访问该表,除非此集群对创建该表的集群有足够的权限,否则将无法访问。此外,由于 HDFS 存储是暂时的,因此,如果集群终止,则表数据将丢失,并且必须重新创建表。我们建议您在使用 AWS Glue 创建 Hive 表时,在 Amazon S3 中指定 LOCATION。或者,您可以使用 hive-site 配置分类在 Amazon S3 中为 hive.metastore.warehouse.dir 指定一个位置,该位置适用于所有 Hive 表。如果在 HDFS 位置创建一个表并且创建该表的集群仍在运行,您可以从 AWS Glue 中将表位置更新为 Amazon S3。有关更多信息,请参阅 AWS Glue Developer Guide 中的在 AWS Glue 控制台上处理表

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

  • 不支持列统计数据

  • 不支持使用 Hive 授权。请考虑使用基于 AWS Glue 资源的策略作为替代。有关更多信息,请参阅将基于资源的策略用于 Amazon EMR 对 AWS Glue Data Catalog 的访问