本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS Glue 数据目录作为 Hive 的元数据库
使用亚马逊EMR版本 5.8.0 或更高版本,您可以将 Hive 配置为使用 Glue 数据目录作为 AWS 其元数据库。当您需要持久的元数据仓或由不同集群、服务、应用程序和 AWS 账户共享的元数据仓时,我们建议使用此配置。
AWS Glue 是一项完全托管的提取、转换和加载 (ETL) 服务,它使对数据进行分类、清理、丰富数据并在各种数据存储之间可靠地移动数据变得简单且经济高效。 AWS Glue 数据目录提供了一个跨各种数据源和数据格式的统一元数据存储库,与亚马逊、亚马逊、亚马逊 Redshift、Redshift Spectrum RDS、Athena EMR 以及任何与 Apache Hive 元数据仓兼容的应用程序集成。 AWS Glue 爬网程序可以自动从 Amazon S3 中的源数据推断出架构,并将相关的元数据存储在数据目录中。有关数据目录的更多信息,请参阅 AWS Glue 开发者指南中的填充 G AWS l ue 数据目录。
Glue 需单独收 AWS 费。在数据目录中存储和访问元数据有月费率,Gl AWS ue ETL 作业和爬虫运行时按小时费率收费,每个预配置的开发端点按每分钟计费。数据目录让您最多可免费存储一百万个对象。如果您存储的对象超过一百万个,则每超过一百万个 USD 100,000 个对象需要支付 1 美元的费用。数据目录中的对象为表、分区或数据库。有关更多信息,请参阅 Glue 定价
重要
如果您在 2017 年 8 月 14 日之前使用 Amazon Athena 或 Amazon Redshift Spectrum 创建了表,则数据库和表将存储在雅典娜管理的目录中,该目录与 Glue 数据目录是分开的。 AWS 要将亚马逊EMR与这些表集成,您必须升级到 AWS Glue 数据目录。有关更多信息,请参阅亚马逊 Athena AWS 用户指南中的升级到 Glue 数据目录。
将 AWS Glue 数据目录指定为元数据库
您可以使用 AWS Management Console、 AWS CLI或 Amazon EMR API 将 AWS Glue 数据目录指定为元数据仓。使用CLI或时API,可以使用 Hive 的配置分类来指定数据目录。此外,在 Amazon EMR 5.16.0 及更高版本中,您可以使用配置分类在不同的数据目录中指定数据目录。 AWS 账户在使用控制台时,您可以使用 Advanced Options (高级选项) 或 Quick Options (快速选项) 指定数据目录。
IAM权限
集群的EC2实例配置文件必须具有 Glue AWS 操作的IAM权限。此外,如果您为 AWS Glue Data Catalog 对象启用加密,则还必须允许该角色加密、解密和生成 AWS KMS key 用于加密的对象。
AWS Glue 操作的权限
如果您使用 Amazon 的默认EC2实例配置文件EMR,则无需执行任何操作。附加到的AmazonElasticMapReduceforEC2Role
托管策略EMR_EC2_DefaultRole
允许执行所有必要的 AWS Glue 操作。但是,如果您指定自定义EC2实例配置文件和权限,则必须配置相应的 AWS Glue 操作。使用 AmazonElasticMapReduceforEC2Role
托管策略作为起点。有关更多信息,请参阅 Amazon EMR 管理指南中的集群EC2EC2实例服务角色(实例配置文件)。
加密和解密 AWS Glue 数据目录的权限
您的实例配置文件需要使用密钥加密和解密数据的权限。如果以下语句适用,您不必配置这些权限:
-
您可以使用 Glue 的 AWS 托管密钥为 Glue 数据目录对象启用加密。 AWS
-
您使用的集群与 Gl AWS ue 数据目录 AWS 账户 相同。
否则,您必须将以下语句添加到您的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 数据目录加密的更多信息,请参阅 Glu e 开发者指南中的AWS 加密数据目录。
基于资源的权限
如果您在亚马逊中将 AWS Glue 与 Hive、Spark 或 Presto 结合使用,EMRGl AWS ue 支持基于资源的策略来控制对数据目录资源的访问。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息,请参阅《AWS Glue 开发人员指南》中的 AWS Glue 资源策略。
使用基于资源的策略限制从 Amazon EMR 内部访问 AWS Glue 时,您在权限策略中指定的委托人必须是与创建集群时指定的EC2实例配置文件ARN关联的角色。例如,对于附加到目录的基于资源的策略,您可以ARN为集群EC2实例指定默认服务角色的角色,EMR_EC2_DefaultRole
正如Principal
,使用以下示例所示的格式:
arn:aws:iam::
acct-id
:role/EMR_EC2_DefaultRole
这些区域有:acct-id
可以与 AWS Glue 账号 ID 不同。这允许从不同账户的EMR集群进行访问。您可以指定多个委托人,且每个委托人都可以来自不同的账户。
使用 AWS Glue 数据目录时的注意事项
使用 AWS Glue 数据目录作为 Hive 的元数据仓时,请考虑以下事项:
-
不支持JARs使用 Hive 外壳添加辅助工具。解决方法是,使用
hive-site
配置分类来设置hive.aux.jars.path
属性,这会JARs将辅助属性添加到 Hive 类路径中。 -
不支持 Hive 事务
。 不支持在 AWS Glue 中重命名表。
当您创建 Hive 表而不指定
LOCATION
时,表数据存储在通过hive.metastore.warehouse.dir
属性指定的位置。默认情况下,这是中的一个位置HDFS。如果另一个集群需要访问该表,则它将失败,除非它有足够的权限访问创建该表的集群。此外,由于HDFS存储是临时性的,因此如果集群终止,表数据就会丢失,必须重新创建表。我们建议您在使用 AWS Glue 创建 Hive 表时LOCATION
在 Amazon S3 中指定。此外,也可以使用hive-site
配置分类来为hive.metastore.warehouse.dir
指定 Amazon S3 中的位置,它适用于所有 Hive 表。如果在某个HDFS位置创建了表,而创建该表的集群仍在运行,则可以从 Glue 中将该表的位置更新为 Amazon S AWS 3。有关更多信息,请参阅《Glue 开发者指南》中的 “在 AWS Glue 控制台AWS 上使用表格”。不支持包含引号和撇号的分区值,例如
PARTITION (owner="Doe's").
emr-5.31.0 及更高版本支持列统计数据
。 不支持使用 Hive 授权
。作为替代方案,考虑使用基于AWS Glue 资源的策略。有关更多信息,请参阅使用基于资源的策略让 Amazon EMR 访问 AWS Glue 数据目录。 不支持 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
Amazon EMR 版本 5.32.0 和 6.3.0 及更高版本支持在谓词表达式中使用用户定义的函数 (UDFs)。使用早期版本时,查询可能因 Hive 尝试优化查询执行的方式而失败。
不支持临时表
。 我们建议通过 Amazon 使用应用程序创建表,EMR而不是直接使用 AWS Glue 创建表。通过 AWS Glue 创建表可能会导致必填字段缺失并导致查询异常。
在 EMR 5.20.0 或更高版本中,当使用 G AWS lue Data Catalog 作为元数据存储时,Spark 和 Hive 会自动启用并行分区修剪。此更改通过并行执行多个请求来检索分区,显著缩短查询计划时间。可同时执行的分段总数介于 1 到 10 之间。默认值为 5,这是建议的设置。您可以通过以下方式更改该值:指定
hive-site
配置分类中的属性aws.glue.partition.num.segments
。如果发生节流,则可以通过将值更改为 1 来关闭此功能。有关更多信息,请参阅 AWS Glue 分段结构。