跳至内容

如何在 Amazon EMR 上使用 Hive 和 Spark 来查询其他账户中的 Data Catalog?

2 分钟阅读
0

我想在 Amazon EMR 中使用 Apache Hive 和 Apache Spark 来访问和查询其他 AWS 账户的 AWS Glue Data Catalog。

简短描述

要动态访问不同账户中的 Data Catalog,请在 Hive 或 Spark 配置中指定 aws.glue.catalog.separator 属性。您还可以在配置中指定 hive.metastore.glue.catalogid 属性,以访问其他账户中的特定 Data Catalog。

解决方法

授予对 AWS Glue 的跨账户访问权限。确保 AWS Glue 表指向的 Amazon Simple Storage Service (Amazon S3) 存储桶已配置跨账户访问权限。有关详细信息,请参阅如何设置 EMR File System 的跨账户访问?

动态访问不同账户中的 Data Catalog

将配置更改应用于新集群

启动 EMR 集群时,请添加类似于以下示例的配置对象。有关详细信息,请参阅创建集群时配置应用程序

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

将配置更改应用于正在运行的集群

完成以下步骤:

  1. 打开 Amazon EMR 控制台
  2. 在集群列表中,在 Cluster Id(集群 ID)下选择要重新配置的活动集群。
  3. 在集群详细信息页面中,选择 Applications(应用程序)选项卡。
  4. Instance group configurations(实例组配置)下,选择实例组,然后选择 Reconfigure(重新配置)。
  5. 选择 Add new configuration(添加新配置),然后输入以下信息:
    对于 Classification(分类),输入 hive-site
    对于 Property(属性),输入 aws.glue.catalog.separator
    对于 Value(值),输入 /
    对于 Classification(分类),输入 hive-site
    对于 Property(属性),输入 hive.metastore.client.factory.class
    对于 Value(值),输入 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
    对于 Classification(分类),输入 spark-hive-site
    对于 Property(属性),输入 aws.glue.catalog.separator
    对于 Value(值),输入 /
    对于 Classification(分类),输入 spark-hive-site
    对于 Property(属性),输入 hive.metastore.client.factory.class
    对于 Value(值),输入 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
  6. 选择 Apply this configuration to all active instance groups(将此配置应用于所有活动实例组),然后选择 Save changes(保存更改)。有关详细信息,请参阅在正在运行的集群中重新配置实例组

查询其他账户中的表

**注意:**当您在 Amazon EMR 版本 6.5 上运行 Spark 作业时,请传递配置属性 spark.sql.catalogImplementation=hive。有关详细信息,请参阅 Apache Spark 网站上的 Dynamically loading Spark properties(动态加载 Spark 属性)

要查询其他账户中的表,请在查询中指定账户编号。账户编号与 catalog ID(目录 ID)相同。例如,要查询账户 111122223333 中的 demodb.tab1,请运行以下命令。

Hive:

SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;

Spark:

spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()

spark-submit 脚本中运行上述 Spark 命令,或作为 Notebook Shell 命令运行。

您还可以联接两个目录中的表。

Hive:

SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2

Spark:

spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()

spark-submit 脚本中运行上述 Spark 命令,或作为 Notebook Shell 命令运行。

访问其他账户中的特定 Data Catalog

将配置更改应用于新集群

启动 EMR 集群时,请添加类似于以下示例的配置对象。有关详细信息,请参阅创建集群时配置应用程序

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

将配置更改应用于正在运行的集群

完成以下步骤:

  1. 打开 Amazon EMR 控制台
  2. 在集群列表中,在 Cluster Id(集群 ID)下选择要重新配置的活动集群。
  3. 在集群详细信息页面中,选择 Applications(应用程序)选项卡。
  4. Instance group configurations(实例组配置)下,选择实例组,然后选择 Reconfigure(重新配置)。
  5. 选择 Add new configuration(添加新配置),然后输入以下信息:
    对于 Classification(分类),输入 hive-site
    对于 Property(属性),输入 hive.metastore.glue.catalogid
    对于 Value(值),输入 account-id
    对于 Classification(分类),输入 hive-site
    对于 Property(属性),输入 hive.metastore.client.factory.class
    对于 Value(值),输入 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
    对于 Classification(分类),输入 spark-hive-site
    对于 Property(属性),输入 hive.metastore.glue.catalogid
    对于 Value(值),输入 account-id
    对于 Classification(分类),输入 spark-hive-site
    对于 Property(属性),输入 hive.metastore.client.factory.class
    对于 Value(值),输入 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
  6. 选中 Apply this configuration to all active instance groups(将此配置应用于所有活动实例组),然后选择 Save changes(保存更改)。有关详细信息,请参阅在正在运行的集群中重新配置实例组

查询其他账户中的表

要查询存储在指定 Data Catalog 中的表,请运行类似于以下示例的命令。

Hive:

SELECT * FROM `demodb.tab1` LIMIT 5;

Spark:

spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()
AWS 官方已更新 6 个月前