使用AmazonGlue 数据目录作为 Hive 的元存储 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用AmazonGlue 数据目录作为 Hive 的元存储

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

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

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

重要

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

指定AmazonGlue 数据目录作为元存储

您可以指定AmazonGlue 数据目录作为元存储Amazon Web Services Management Console、Amazon CLI或亚马逊 EMR API。在使用 CLI 或 API 时,您可以使用 Hive 的配置分类指定数据目录。此外,使用 Amazon EMR 5.16.0 及更高版本,您可以使用配置分类在不同的Amazonaccount. 在使用控制台时,您可以使用高级选项或者快速选项

注意

使用数据目录的选项也适用于 HCatalog,因为 Hive 安装有 HCatalog。

指定AmazonGlue 数据目录作为元存储使用控制台

  1. 从打开 Amazon EMR 控制台https://console.aws.amazon.com/elasticmapreduce/

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

  3. 对于 Release (版本),选择 emr-5.8.0 或更高版本。

  4. Release (版本) 下,选择 HiveHCatalog

  5. AmazonGlue 数据目录设置选择用于 Hive 表元数据

  6. 根据需要为您的集群选择其他选项,选择 Next (下一步),然后根据需要为您的应用程序配置其他集群选项。

指定Amazon使用配置分类作为元存储

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

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

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

    在 EMR 版本 5.28.0、5.28.1 或 5.29.0 上,如果您正在使用AmazonGlue 数据目录作为元存储,另请将hive.metastore.schema.verificationfalse。这可以防止 Hive 和 HCatalog 根据 MySQL 验证元数据仓架构。如果没有此配置,主实例组将在 Hive 或 HCatalog 上进行重新配置后暂停。请参见以下示例:

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

    如果您在 EMR 版本 5.28.0、5.28.1 或 5.29.0 上已有集群,则可以使用以下信息将主实例组 hive.metastore.schema.verification 设置为 false

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

    若要在不同的Amazon帐户中,添加hive.metastore.glue.catalogid属性,如以下示例所示。Replaceacct-id与Amazon帐户。

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

IAM 权限

集群的 EC2 实例配置文件必须具有AmazonGlue 操作。此外,如果启用AmazonGlue Data Catalog Data Catalog 数据目录对象,还必须允许该角色加密、解密和生成用于加密的客户主密钥 (CMK)。

的权限AmazonGlue 动作

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

加密和解密的权限AmazonGlue 数据目录

本节介绍有关的加密功能。AmazonGlue 数据目录。有关 的更多信息AmazonGlue 数据目录加密,请参阅加密您的数据目录中的AmazonGlue 开发人员指南

如果启用加密Amazon使用托管密钥 Glue 合数据目录对象AmazonGlue,以及访问AmazonGlue 数据目录在同一Amazon账户,您无需更新附加到 EC2 实例配置文件的权限策略。如果使用客户托管 CMK,或者如果集群位于不同的 Amazon 账户中,您必须更新权限策略,以使 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" } ] } ]

基于资源的权限

如果您使用Amazon在亚马逊 EMR 中与蜂巢、火花或普雷斯托结合使用 Glue,AmazonGlue 支持基于资源的策略,控制对数据目录资源的访问权限。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息,请参阅 。AmazonGlue 资源策略中的AmazonGlue 开发人员指南

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

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

这些区域有:Catalog (ID)可能与AmazonGlue 附账户 ID。这样可以从不同账户中的 EMR 集群进行访问。您可以指定多个委托人,每个委托人来自不同的帐户。

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

在使用AmazonGlue 数据目录作为 Hive 的元存储:

  • 不支持使用 Hive 外壳添加辅助 JAR。作为解决方法,请使用 hive-site 配置分类来设置 hive.aux.jars.path 属性,它会将辅助 JAR 添加到 Hive 类路径中。

  • 不支持 Hive 事务

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

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

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

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

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

  • Hive 约束不支持。

  • Hive 中基于成本的优化不支持 。

  • 设置hive.metastore.partition.inherit.table.properties不支持 。

  • 不支持使用以下元数据仓常量:BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION

  • 使用谓词表达式时,显式值必须位于比较运算符的右侧,否则查询可能会失败。

    • 正确SELECT * FROM mytable WHERE time > 11

    • 错误SELECT * FROM mytable WHERE 11 > time

  • 我们不建议在谓词表达式中使用用户定义的函数 (UDF)。由于 Hive 尝试优化查询执行的方式,查询可能会失败。

  • 临时表不支持。

  • 我们建议通过 Amazon EMR 使用应用程序创建表,而不是直接使用AmazonGlue。通过创建表AmazonGlue 可能会导致必填字段丢失,并导致查询异常。

  • 在 EMR 5.20.0 或更高版本中,当 AWS Glue 数据目录用作元仓时,Spark 和 Hive 会自动启用并行分区修剪。此更改通过并行执行多个请求来检索分区,显著缩短查询规划时间。可同时执行的段总数介于 1 到 10 之间。默认值为 5,这是建议的设置。您可以通过指定属性aws.glue.partition.num.segmentshive-site配置分类。如果发生限制,则可以通过将值更改为 1 来关闭要素。有关更多信息,请参阅 。AmazonGlue 结构