

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

# 将数据目录连接到外部 Hive 元存储
<a name="hms-setup"></a>

[要连接 AWS Glue Data Catalog 到 Hive 元数据仓，您需要部署一个名为 GlueDataCatalogFederation-的 AWS SAM 应用程序。HiveMetastore](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore)它创建将外部 Hive 元存储与数据目录连接起来所需的资源。您可以在中访问该 AWS SAM 应用程序 AWS Serverless Application Repository。

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

**将数据目录连接到 Hive 元存储并设置权限**

1. 

**部署 AWS SAM 应用程序。**

   1. 登录 AWS 管理控制台 并打开 AWS Serverless Application Repository。

   1. 在导航窗格中，选择 **Available applications (可用应用程序)**。

   1. 选择**公用应用程序**。

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

   1. 在搜索框中，输入名称 **GlueDataCatalogFederation-HiveMetastore**。

   1. 选择 **GlueDataCatalogFederation-HiveMetastore** 应用程序。

   1. 在**应用程序设置**下，为您的 Lambda 函数输入以下必需的最低设置：
      + **应用程序名称**- AWS SAM 应用程序的名称。
      + **GlueConnectionName**-连接的名称。
      + **HiveMetastoreURIs**-您的 Hive 元数据仓主机的 URI。
      + **LambdaMemory**-从 128-10240 开始的 Lambda 内存量（以 MB 为单位）。默认值为 1024。
      + **LambdaTimeout**-Lambda 调用的最大运行时间（以秒为单位）。默认值为 30。
      + **VPCSecurityGroupIds**和 I **VPCSubnetds**-存在 Hive 元数据仓的 VPC 的信息。

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

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

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

1. 

**在数据目录中创建数据库。**

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

------
#### [ Lake Formation console ]

   1. 在**数据共享**页面上，选择**共享数据库**选项卡，然后选择**创建数据库**。

   1. 对于**连接名称**，从下拉菜单中选择 Hive 元存储连接的名称。

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

   1. 选择**创建数据库**。

------
#### [ AWS CLI ]

   ```
   aws glue create-database \
   '{
    "CatalogId": "<111122223333>",
     "database-input": {
       "Name":"<fed_glue_db>",
       "FederatedDatabase":{
           "Identifier":"<hive_db_on_emr>",
           "ConnectionName":"<hms_connection>"
        }
      }
    }'
   ```

------

1. 

**查看联合数据库中的表。**

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

------
#### [ Lake Formation console ]

   1. 从**共享数据库**选项卡中选择数据库名称。

   1. 在**数据库**页面上，选择**查看表**。

------
#### [ AWS CLI ]

   以下示例说明如何检索连接定义、数据库名称以及数据库中的部分或全部表。将数据目录的 ID 替换为创建数据库时使用的有效 AWS 账户 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
   ```

------

1. 

**授予权限**

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

1. 

**查询联合数据库。**

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

   ** Amazon Athena 查询语法示例**

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

    `Select * from fed_glue_db.customers limit 10;`