亚马逊AWS官方博客

利用 AWS Lake Formation 探索元数据:第 1 部分

Original URL: https://aws.amazon.com/cn/blogs/big-data/discovering-metadata-with-aws-lake-formation-part-1/

数据湖是一种用于创建单个存储库以存储和分析结构化和非结构化数据的日益流行的方法。AWS Lake Formation 使您可以轻松设置、保护和管理数据湖。本博文将引导您使用 Lake Formation 来创建和探索数据湖:

  • 创建数据湖

o  将数据添加到数据湖

o  创建目录数据库

o  将表从 Amazon S3 添加到目录数据库

  • 在目录中编辑和添加元数据

o  编辑标准元数据

o  添加自定义元数据

先决条件

对于本博文,您需要:

创建数据湖

AWS Lake Formation 控制台的左侧导航窗格中,选择注册并提取数据湖位置。选择一个 S3 存储桶以在您的数据湖中容纳几个独立的数据源。有关更多信息,请参阅什么是 AWS Lake Formation?

将数据添加到数据湖

现在,您已经将 S3 存储桶配置为 Lake Formation 的存储资源,您必须将数据添加到数据湖。您可以使用 AWS SDK、AWS CLI、S3 控制台或 Lake Formation 蓝图将数据添加到数据湖的 S3 存储桶存储资源中。

借助 Lake Formation,您可以发现并设置源数据的提取。添加用于加载或更新数据湖的工作流时,可以选择要添加的导入程序类型的蓝图或模板。Lake Formation 在 Lake Formation 控制台上为通用源数据类型提供了多个蓝图,旨在简化工作流的创建。工作流指向您的数据源和目标,并且指定了它们运行的频率。

对于本博文,请使用 AWS CLI 下载示例数据,然后将其上传到您的 S3 存储后端。其他导入方法(例如 Lake Formation 数据导入程序)不在本文讨论范围内。

AWS 开放数据注册表上提供的以下两个数据集中的示例:

在数据湖中制作两份 Amazon 客户评论数据集副本。您可以使用它们来模拟“生产”数据集和“测试”数据集,并了解在搜索元数据目录时如何定位其中一个或两个数据集。

为了演示 AWS 数据湖的灵活性,请将 CSV 和 Parquet 数据集都添加到您的数据湖。在这两种情况下,请为 S3 对象使用以下命名约定:

s3://BUCKET_NAME/DATABASE_NAME/TABLE_NAME/<data files>

将 Amazon 客户评论添加到数据湖

AWS 托管了一个注册表,可帮助用户共享和发现各种数据集。对于本博文,请将 Amazon 客户评论数据集的子集添加到数据湖。您无须复制完整的评论数据集,只需复制观看评论中较小的 226 MB 部分。您需要在数据湖中添加此数据的两个副本,以模拟单独的“生产”数据库和“测试”数据库。

  1. 如果尚未添加,请使用 IAM 用户访问密钥安装和配置 AWS CLI,该密钥包含从 S3 中读取并写入 Lake Formation S3 存储桶的权限。
  2. 将源数据复制到数据湖:
    # 使用您的存储桶名称进行替换:
    YOUR_BUCKET=lf-metadata-demo
     
    aws s3 cp \
       s3://amazon-reviews-pds/parquet/product_category=Watches/ \
       s3://$YOUR_BUCKET/amazon-reviews-prod/amazon-reviews/ --recursive
     
    aws s3 cp \
       s3://amazon-reviews-pds/parquet/product_category=Watches/ \
       s3://$YOUR_BUCKET/amazon-reviews-test/amazon-reviews/ --recursive
  3. 在 S3 控制台中,确认您的 S3 存储桶现在包含两个 Amazon 评论数据集。
  4. 检查文件夹的内容。数据集采用 Parquet 格式。

将纽约出租车行车历史记录添加到数据湖

按照您对 Amazon 客户评论数据集所执行的操作,将纽约出租车行车历史记录的一个小子集从 AWS 开放数据注册表复制到数据湖:

  1. 将源数据复制到数据湖:
    # 使用您的存储桶名称进行替换:
    YOUR_BUCKET=lf-metadata-demo
     
    aws s3 cp \
       “s3://nyc-tlc/trip data/green_tripdata_2018-02.csv” \
       “s3://$YOUR_BUCKET/ny-taxi/trip-data/green_tripdata_2018-02.csv”
  2. 在 S3 控制台中,确认您的 S3 存储桶包含纽约出租车行程的 CSV 数据。

创建目录数据库

您已创建用作数据湖存储后端的 S3 存储桶,并且已将数据添加到该存储桶。但是,在对数据进行编目之前,此数据在 Lake Formation 中尚不可用。

Lake Formation 在数据湖中保存与 Hive 兼容的数据目录。您必须先创建数据库,然后才能在 S3 存储后端中对数据进行编目或使用 Lake Formation 数据导入程序(稍后讨论)将数据推送到 S3。

Lake Formation 数据库采用逻辑结构,您稍后可以向其添加表。每个表都包含向 S3 中的一个或多个对象的映射,它们共同表示该表。表还包含基本元数据,包括但不限于文件格式、S3 位置、列标题和列类型。Lake Formation 用户还可以选择为表和列定义任意键值对,以更好地描述数据并用作数据发现的可查询属性。

您可以在控制台中手动创建一个或多个数据库,并使用 AWS SDK 或 AWS CLI 以编程方式填充其中的表,也可以通过定义 AWS Glue 爬网程序自动创建它们。

对于本博文,您必须定义以下三个逻辑数据库:

amazon-reviews-prod

amazon-reviews-test

ny-taxi

然后,使用编目流程映射到您先前上传到 S3 存储后端的两个数据集。请记住,您有意创建了两个 Amazon 评论数据集副本,用来模拟数据湖中的生产数据库和测试数据库。

现在,请创建您的数据库。首先,在 Lake Formation 中将 IAM 用户和角色配置为管理员。

目录权限是指所选 IAM 主体可以直接使用的权限。可授予权限是指 IAM 主体稍后可以为其他 IAM 主体授予的权限。

例如,您可能希望通过授予目录权限,使数据库管理员 (DBA) 能够创建数据库。但是,通过禁用可授予权限,可以防止 DBA 意外地将此访问权限授予给开发人员。

现在,您已经授予了必要的权限,可以继续在目录中创建数据库。

  • 对于名称,请输入 amazon-reviews-prod
  • 对于位置,请输入 s3://<YOUR_BUCKET>/amazon-reviews-prod
  • 对于描述,请输入有意义的简短描述。
  • 对于此数据库中的新表,请选中默认的仅允许基于IAM的权限控制。在生产中,请评估这样做是否满足权限控制要求。

对其他两个数据库重复此过程:

  • 名称amazon-reviews-test
    位置:s3://<YOUR_BUCKET>/amazon-reviews-test
  • 名称ny-taxi
    位置:s3://<YOUR_BUCKET>/ny-taxi

完成这些步骤之后,您的目录中应该有三个数据库:amazon-reviews-prodamazon-reviews-testny-taxi

将表从 S3 添加到目录数据库

在上一节中,您在 Lake Formation 目录中创建了三个数据库。但是,这些目录数据库为空,尚未提供 S3 中的特定表、架构、文件格式或对象路径的相关信息。要添加此信息,请使用以下两种方法之一:

  • 使用控制台、SDK 或 AWS CLI 在目录中手动定义表。
  • 使用 AWS Glue 爬网程序搜索 S3 并将发现的表自动添加到目录中。

对于本博文,为 S3 中的三个数据集和 Lake Formation 数据目录中的数据库分别创建并手动运行一个 AWS Glue 爬网程序。详细演练不在本文讨论范围内。有关指导,请参阅在 AWS Glue 控制台上使用爬网程序

继续操作时,请牢记以下几点:

  • 为三个数据集分别创建一个爬网程序。您应该能够接受大多数默认的爬网程序设置。但是,爬网程序的 S3 路径应该为:

s3://YOUR_BUCKET/amazon-reviews-prod/amazon-reviews

s3://YOUR_BUCKET/amazon-reviews-test/amazon-reviews

s3://YOUR_BUCKET/ny-taxi/trip-data

在运行爬网程序以填充目录之前,必须为它们分配 IAM 角色。该角色授予他们从数据湖的 S3 存储桶中读取数据、将爬网程序日志写入 Amazon CloudWatch 以及更新数据目录的权限。无论是创建新角色还是使用现有角色,都请记下 IAM 角色名称。您需要此信息来执行下一步操作。

除了在 IAM 中定义的权限外,您还必须明确授予 IAM 主体(角色或用户)从 Lake Formation 内部修改数据目录的能力。从概念上讲,这类似于与 IAM 一起使用的 S3 中的存储桶策略概念。在 Lake Formation 控制台的权限下,选择数据权限

授予 AWS Glue 爬网程序修改数据目录的能力。配置以下字段:

  • 对于 IAM 用户和角色,请选择 AWS Glue 爬网程序之前使用的 IAM 角色。
  • 对于数据库,请选择 amazon-reviews-prodamazon-reviews-testny-taxi 数据库。
  • 对于数据库权限,请选择所有权限。
  • 让所有可授予权限保持未选中状态。

当 AWS Glue 爬网程序获得修改 Lake Formation 数据目录的权限后,返回 AWS Glue 控制台并手动运行三个爬网程序。几分钟后,这些爬网程序应该已完成运行。每个爬网程序都应该会向数据目录添加一个表:

o  amazon-reviews

o  amazon-reviews

o  trip-data

验证您的目录是否已更新。在 Lake Formation 控制台的数据目录下,选择,然后查看添加到相应的数据湖数据库中的三个新表,如以下屏幕截图所示。

在目录中编辑和添加元数据

AWS Glue 爬网程序会填充有关在 S3 中发现的表的标准元数据,包括(但不限于)属性,例如对象位置、文件格式、列标题和列类型。

但是,您可以手动编辑标准元数据或将其他自定义元数据添加到目录中,以使其更易于搜索并提高其提供的整体价值。在下一节中,我将逐步介绍编辑和添加元数据的几个示例。

编辑标准元数据

AWS Glue 爬网程序可从 CSV 文件的第一行推断出列名称。要查看 ny_taxi 表中自动填充的列名称,请查看表属性:

  1. 数据目录下,选择
  2. 选择 ny_taxi,然后向下滚动到架构部分。
  3. 选择编辑架构。数据列名称必须始终使用蛇形命名法,这意味着需要在单词之间使用“_”字符。更改所有 id 列以匹配其余列。如果查看原始数据的第一行,则会发现使用了不一致的命名。您可以手动更改元数据,而不是更改这些文件。
  4. 选择 vendorid 行,然后选择编辑。做出更改以包含蛇形命名法,然后选择保存
  5. dolocationidratecodeidpulocationid 重复以下步骤。做出更改后,选择另存为新版本
  6. 数据目录下,选择。如果搜索 pulocationid,则不会返回任何结果。
  7. 搜索新的列名称 pu_location_id。该搜索应该会返回预期结果,即 ny-taxi 数据库中的 trip_data 表。

添加自定义元数据

现在,尝试添加几个自定义表属性来帮助组织表。要添加的第一个表属性是environment变量,可帮助您确定表是用于开发、测试还是生产。要添加的第二个表属性是department变量,它允许您按部门对表进行分组。

  1. 在 Lake Formation 控制台的数据目录下,选择数据库
  2. 选择ny-taxi 数据库,然后选择查看表
  3. 选择trip_data 表,然后选择编辑表
  4. 表属性下,选择添加。将environment值设置为dev,并将department值设置为research1。选择保存。
  5. 注意:如果保存失败,请检查当前用户是否有修改表的权限
  6. 数据目录下,选择。在搜索栏中,键入“research”,然后按 Enter。未返回任何结果,因为不存在表属性值为research的表。但是,搜索research1应该会返回 trip_data 表。
  7. 返回 trip-data 的表属性,并将department属性从research1更新为research。完成编辑后,在表搜索中输入“研究”作为关键字时,将显示 trip-data 表:

小结

恭喜,您已经成功使用 Lake Formation 创建并编辑了您的第一个数据湖。您已使用该服务保护数据并将其提取到 S3 数据湖中,对数据进行编目,并自定义数据源的元数据。在本系列的第 2 部分中,我将向您展示如何使用 Lake Formation 的元数据搜索功能来发现数据。

 


关于作者

Julia Soscia 是总部设在纽约市的 Amazon Web Services 的解决方案架构师。她的主要工作是帮助客户在 AWS 云平台上创建架构完善的环境。她是一位经验丰富的数据分析师,专注于大数据和分析。
 

 

 

 

Eric Weinberg 是 AWS Envision Engineering 团队的系统开发工程师。他在构建和设计软件应用程序方面拥有 15 年的经验。

 

 

 

 

Francesco Marelli 是 Amazon Web Services 的高级解决方案架构师。他在分析和数据管理方面拥有二十多年的经验。

 

 

 

 

Mat Werber 是 AWS 社区 SA 团队的解决方案架构师。 他负责在整个 AWS 堆栈中提供架构指导,并专注于无服务器、Redshift、DynamoDB 和 RDS。他还在 IT 监管、风险和控制方面具有审计背景。