将数据目录连接到外部 Hive 元存储 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将数据目录连接到外部 Hive 元存储

要连接 Amazon Glue Data Catalog 到 Hive 元数据仓,您需要部署一个名为 GlueDataCatalogFederation-的 Amazon SAM 应用程序。HiveMetastore它创建将外部 Hive 元存储与数据目录连接起来所需的资源。您可以在中访问该 Amazon SAM 应用程序 Amazon Serverless Application Repository。

该 Amazon SAM 应用程序使用 Lambda 函数为 Amazon API Gateway 后面的 Hive 元数据仓创建连接。 Amazon SAM 应用程序使用统一资源标识符 (URI) 作为用户的输入,并将外部 Hive 元数据仓连接到数据目录。当用户对 Hive 表运行查询时,数据目录会调用 API Gateway 终端节点。该端点调用 Lambda 函数来检索 Hive 表的元数据。

将数据目录连接到 Hive 元存储并设置权限
  1. 部署 Amazon SAM 应用程序。
    1. 登录 Amazon Web Services Management Console 并打开 Amazon Serverless Application Repository。

    2. 在导航窗格中,选择 Available applications (可用应用程序)

    3. 选择公用应用程序

    4. 选择 Show apps that create custom IAM roles or resource policies(显示创建自定义 IAM 角色或资源策略的应用程序)选项。

    5. 在搜索框中输入名称 GlueDataCatalogFederation-HiveMetastore

    6. 选择 GlueDataCatalogFederation-HiveMetastore 应用程序。

    7. 应用程序设置下,为您的 Lambda 函数输入以下必需的最低设置:

      • 应用程序名称- Amazon SAM 应用程序的名称。

      • GlueConnectionName-连接的名称。

      • HiveMetastoreURI-您的 Hive 元数据仓主机的 URI。

      • LambdaMemory-从 128-10240 开始的 Lambda 内存量(以 MB 为单位)。默认值为 1024。

      • LambdaTimeout-Lambda 调用的最大运行时间(以秒为单位)。默认值为 30。

      • VPC SecurityGroupIds 和 VPC SubnetIds-存在 Hive 元数据仓的 VPC 的信息。

    8. 选中 I acknowledge that this app creates custom IAM roles and resource policies(我确认此应用程序创建自定义 IAM 角色和资源策略)。有关更多信息,请选择 Info (信息) 链接。

    9. Application settings(应用程序设置)部分的右下角,选择 Deploy(部署)。部署完成后,Lambda 函数将显示在 Lambda 控制台中的 Resource(资源)部分。

    该应用程序已部署到 Lambda。它的名称前面带有 serverlessrepo-,表示该应用程序是从中部署的。 Amazon Serverless Application Repository选择该应用程序会将您带到资源页面,该页面中列出了已部署的应用程序的每个资源。这些资源包括允许在数据目录和 Hive 元数据仓之间进行通信的 Lambda 函数、 Amazon Glue 连接以及数据库联合所需的其他资源。

  2. 在数据目录中创建数据库。

    创建与 Hive 元数据仓的连接后,可以在数据目录中创建指向外部 Hive 元数据仓数据库的联合数据库。您需要在数据目录中为连接到数据目录的每个 Hive 元数据仓数据库创建相应的数据库。

    Lake Formation console
    1. 数据共享页面上,选择共享数据库选项卡,然后选择创建数据库

    2. 在 “连接名称” 中,从下拉菜单中选择 Hive 元数据仓连接的名称。

    3. 输入唯一数据库名称和数据库的联合身份验证源标识符。这是您在查询表时在 SQL 语句中使用的名称。该名称最多可包含 255 个字符,并且在您的账户中必须是唯一的。

    4. 选择创建数据库

    Amazon CLI
    aws glue create-database \ '{ "CatalogId": "<111122223333>", "database-input": { "Name":"<fed_glue_db>", "FederatedDatabase":{ "Identifier":"<hive_db_on_emr>", "ConnectionName":"<hms_connection>" } } }'
  3. 查看联合数据库中的表。

    创建联合数据库后,您可以使用 Lake Formation 控制台或 Amazon CLI查看 Hive 元存储中表的列表。

    Lake Formation console
    1. 共享数据库选项卡中选择数据库名称。

    2. 数据库页面上,选择查看表

    Amazon CLI

    以下示例说明如何检索连接定义、数据库名称以及数据库中的部分或全部表。将数据目录的 ID 替换为创建数据库时使用的有效 Amazon Web Services 账户 ID。将 hms_connection 替换为连接名称。

    aws glue get-connection \ --name <hms_connection> \ --catalog-id 111122223333
    aws glue get-database \ --name <fed_glu_db> \ --catalog-id 111122223333
    aws glue get-tables \ --database-name <fed_glue_db> \ --catalog-id 111122223333
    aws glue get-table \ --database-name <fed_glue_db> \ --name <hive_table_name> \ --catalog-id 111122223333
  4. 授予权限

    创建数据库后,您可以向账户中的其他 IAM 用户和角色或外部 Amazon Web Services 账户 和组织授予权限。您将无法授予对联合数据库的写入数据权限(插入、删除)和元数据权限(更改、删除、创建)。有关授予权限的更多信息,请参阅管理 Lake Formation 权限

  5. 查询联合数据库。

    在您授予权限后,用户可以使用 Athena 和 Amazon Redshift 登录并开始查询联合数据库。用户现在可以在 SQL 查询中使用本地数据库名称引用 Hive 数据库。

    Amazon Athena 查询语法示例

    fed_glue_db替换为之前创建的本地数据库名称。

    Select * from fed_glue_db.customers limit 10;