如何在 Amazon EMR 上使用 Hive 和 Spark 查询位于不同 AWS 账户中的 AWS Glue 数据目录?

上次更新日期:2021 年 2 月 23 日

我想在 Amazon EMR 中使用 Apache Hive 和 Apache Spark 访问和查询另一个账户的 AWS Glue 数据目录。

简短描述

要访问和查询其他账户的 AWS Glue 数据目录,请在 Hive 和 Spark 配置中添加属性 “aws.glue.catalog.separator": "/”。您可以在新集群或正在运行的集群上配置此属性。

注意:此解决方案在 Amazon EMR 5.x 系列的 Amazon EMR 5.28.0-5.30.x 和 Amazon EMR 5.32.0 发行版本上有效。
此解决方案不适用于 Amazon EMR 6.x 发行版本。
EMR 集群和 AWS Glue 数据目录必须位于同一区域。

解决方法

如果您尚未设置,请设置对 AWS Glue 的跨账户访问权限。确保将 AWS Glue 表指向的 Amazon Simple Storage Service (Amazon S3) 存储桶配置为跨账户访问。有关详细信息,请参阅如何为 EMRFS 设置跨账户访问权限?

然后,将 Hive 和 Spark 的 aws.glue.catalog.separator 属性设置为 /

在新集群上

在启动集群时,添加以下类似的配置对象

[
    {
        "Classification": "hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    },
    {
        "Classification": "spark-hive-site",
        "Properties": {
            "aws.glue.catalog.separator": "/"
        }
    }    
]

正在运行的集群上

  1. 打开 Amazon EMR 控制台
  2. 在集群列表中,在名称下选择要重新配置的活动集群。
  3. 打开集群的集群详细信息页面,然后选择配置选项卡。
  4. 筛选条件下拉列表中,选择您想要重新配置的实例组。
  5. 重新配置下拉列表中,选择在表中编辑
  6. 在配置分类表中,选择添加配置,然后输入以下内容:
    对于分类:hive-site
    对于属性:aws.glue.catalog.separator
    对于:/
    对于分类:spark-hive-site
    对于属性:aws.glue.catalog.separator
    对于:/
  7. 选择将此配置应用到所有活动的实例组,然后选择保存更改

查询其他 AWS 账户中的表

要查询位于不同 AWS 账户中的表,请在查询中指定账号。账号与目录 ID 相同。例如,在 Hive 的账户 111122223333 中查询 demodb.tab1

select * from `111122223333/demodb.tab1` limit 5;

Spark 示例(在 spark-submit 脚本中运行它,或作为笔记本 shell 命令运行):

spark.sql("select * from `111122223333/demodb`.tt1 limit 5").show()

您还可以跨两个目录联接表。Hive 示例:

select * from `111122223333/demodb.tab1` t1 inner join  `444455556666/demodb.tab2` t2 on t1.col1 = t2.col2

Spark 示例(在 spark-submit 脚本中运行它,或作为笔记本 shell 命令运行):

spark.sql(select * from `111122223333/demodb.tab1` t1 inner join  `444455556666/demodb.tab2` t2 on t1.col1 = t2.col2).show()

或者,在 spark-submit 脚本中使用 --conf 选项传递参数,或作为笔记本 shell 命令运行。示例:

pyspark --conf spark.hadoop.aws.glue.catalog.separator="/"

这篇文章对您有帮助吗?


您是否需要账单或技术支持?