飞鱼加速器官方网下载
  • 32

介绍 Apache Hudi 支持与 AWS Glue 爬虫 大数据博客

在 AWS Glue 中引入 Apache Hudi 支持的爬虫

作者: Noritaka Sekiyama Kyle Duong 和 Sandeep Adwankar,发布日期是 2023 年 11 月 22 日分类:分析,公告,AWS Glue永久链接分享:

关键要点

Apache Hudi 为数据湖带来了数据库和数据仓库的能力,有助于管理不断变化的数据集,同时保持查询性能。AWS Glue 爬虫现在支持 Hudi 表,使得在 AWS Glue 数据目录中注册 Hudi 表变得更为简便。本文展示了如何使用 AWS Glue 爬虫爬取 Hudi 表,并提供了详细的使用指南。

Apache Hudi 是一种开放的表格式,它为数据湖引入了数据库和数据仓库的特性。Hudi 可以帮助数据工程师管理复杂问题,比如处理不断变化的数据集,支持事务并保持查询性能。数据工程师利用 Apache Hudi 可以处理流数据工作负载,并创建高效的增量数据管道。Hudi 提供了多种功能,包括 表管理、事务管理、高效的更新和删除、高级索引、流式摄取服务、数据 聚类 和 压缩 优化,以及 并发控制,同时保持数据的开放源代码文件格式。Hudi 的高级性能优化可以加速分析工作负载,适用于 Apache Spark、Presto、Trino、Hive 等流行查询引擎。

许多 AWS 客户在 Amazon S3 上构建的数据湖中采用了 Apache Hudi,借助于 AWS Glue,这是一项无服务器的数据集成服务,可以简化数据的发现、准备、移动和整合以进行分析、机器学习ML和应用开发。 AWS Glue 爬虫 是 AWS Glue 的一个组件,使您可以自动创建表元数据,而不需要手动定义元数据。

AWS Glue 爬虫现在支持 Apache Hudi 表,简化了使用 AWS Glue 数据目录作为 Hudi 表的目录的过程。一个常见的用例是注册没有目录表定义的 Hudi 表。另一个典型用例是从其他 Hudi 目录例如 Hive 元存储迁移。当从其他 Hudi 目录迁移时,您可以创建并调度 AWS Glue 爬虫,并提供一个或多个 Hudi 表文件所在的 Amazon S3 路径。您可以选择提供 AWS Glue 爬虫可以遍历的 Amazon S3 路径的最大深度。在每次运行中,AWS Glue 爬虫将提取模式和分区信息,并更新 AWS Glue 数据目录中的模式和分区更改。AWS Glue 爬虫还会更新 AWS Glue 数据目录中最新的元数据文件位置,以便 AWS 的分析引擎可以直接使用。

这个发布使得用户可以创建和调度 AWS Glue 爬虫来注册 Hudi 表在 AWS Glue 数据目录中。您可以提供一个或多个 Hudi 表所在的 Amazon S3 路径,并选择爬虫可以遍历的最大路径深度。每次爬虫运行时,它都会检查每个 S3 路径并记录模式信息,比如新表、删除和模式更新到 AWS Glue 数据目录。爬虫会检查分区信息,并将新添加的分区添加到 AWS Glue 数据目录。爬虫还会更新最新的元数据文件位置,供 AWS 分析引擎直接使用。

本篇文章将演示这一新的爬取 Hudi 表能力是如何工作的。

AWS Glue 爬虫如何与 Hudi 表协作

Hudi 表分为两类,每种类型都有特定的影响:

写时复制Copy on write CoW 数据以列数组的格式Parquet存储,每次更新时会创建文件的新版本。读时合并Merge on read MoR 数据使用列式Parquet和行式Avro格式的组合进行存储。更新记录到行式的 delta 文件中,并根据需要进行压缩,以创建新的列式文件版本。

在 CoW 数据集上,每次记录更新时,包含该记录的文件都会用更新后的值重写。而在 MoR 数据集上,每次更新时,Hudi 仅写入已更改记录的行。MoR 更适合于写入或更改频繁的工作负载,而 CoW 则更适合于读取频繁且变更不太频繁的数据工作负载。

Hudi 提供了三种查询类型来访问数据:

快照查询Snapshot queries 查询在给定提交或压缩操作时查看表的最新快照。对于 MoR 表,快照查询通过合并基文件和最新文件切片的 delta 文件来展示表的最新状态。增量查询Incremental queries 查询仅查看自给定提交或压缩以来写入表的新数据。这有效地提供了变更流来支持增量数据管道。读取优化查询Read optimized queries 对于 MoR 表,查询可以查看最新的压缩数据;对于 CoW 表,查询可以查看最新的已提交数据。

对 CoW 表,爬虫会在 AWS Glue 数据目录中创建一个单一表,使用 ReadOptimized 的 Serde orgapachehudihadoopHoodieParquetInputFormat。

对于 MoR 表,爬虫会为同一表位置在 AWS Glue 数据目录中创建两个表:

一个后缀为 ro 的表,使用 ReadOptimized Serde orgapachehudihadoopHoodieParquetInputFormat一个后缀为 rt 的表,使用支持快照查询的实时 Serde:orgapachehudihadooprealtimeHoodieParquetRealtimeInputFormat

在每次爬虫操作中,爬虫会对每个提供的 Hudi 路径进行 Amazon S3 列表 API 调用,根据 hoodie 文件夹进行过滤,并找到该 Hudi 表元数据文件夹下最新的元数据文件。

使用 AWS Glue 爬虫爬取 Hudi CoW 表

在本节中,我们将介绍如何使用 AWS Glue 爬虫爬取 Hudi CoW 表。

前提条件

以下是本教程的前提条件:

安装并配置 AWS 命令行接口AWS CLI。如果您尚未创建 S3 桶,请创建一个。创建您用于 AWS Glue 的 IAM 角色,您需要对 s3//yours3bucket/data/samplehudicowtable/ 有 s3GetObject 权限。

运行以下命令将示例 Hudi 表复制到您的 S3 桶中。将 yours3bucket 替换为您的 S3 桶名称。

bash aws s3 sync s3//awsbigdatablog/artifacts/hudicrawler/productcow/ s3//yours3bucket/data/samplehudicowtable/

这个指导帮助您复制示例数据,但您也可以使用 AWS Glue 容易地创建任何 Hudi 表。您可以在 在 AWS Glue 中原生支持 Apache Hudi、Delta Lake 和 Apache Iceberg 的介绍,第 2 部分:AWS Glue Studio 可视化编辑器 中了解更多信息。

创建 Hudi 爬虫

以下步骤将通过控制台创建爬虫。完成以下步骤以创建 Hudi 爬虫:

在 AWS Glue 控制台上,选择 爬虫。选择 创建爬虫。在 名称 中输入 hudicowcrawler,然后选择 下一步。

在 数据源配置 下,选择 添加数据源。

在 数据源 中选择 Hudi。在 包括 Hudi 表路径 中输入 s3//yours3bucket/data/samplehudicowtable/。将 yours3bucket 替换为您的 S3 桶名称。选择 添加 Hudi 数据源。

选择 下一步。

对于 现有的 IAM 角色,选择您的 IAM 角色,然后选择 下一步。对于 目标数据库,选择 添加数据库,然后会弹出 添加数据库 对话框。在 数据库名称 中输入 hudicrawlerblog,然后选择 创建。选择 下一步。选择 创建爬虫。

现在,新创建的 Hudi 爬虫已成功创建。可以通过控制台、SDK 或 AWS CLI 使用 StartCrawl API 启动爬虫。您还可以通过控制台将其调度在特定时间触发。在本说明中,通过控制台运行爬虫。

选择 运行爬虫。等待爬虫完成。

爬虫运行后,您可以在 AWS Glue 控制台中看到 Hudi 表定义:

您已成功爬取了 Amazon S3 上的数据的 Hudi CoW 表,并在 AWS Glue 数据目录中创建了已填充模式的表定义。在 AWS Glue 数据目录中创建表定义后,AWS 分析服务如 Amazon Athena能够查询 Hudi 表。

完成以下步骤以开始在 Athena 中查询:

打开 Amazon Athena 控制台。

运行以下查询。

sqlSELECT FROM hudicrawlerblogsamplehudicowtable limit 10

以下是我们的输出截图:

使用 AWS Glue 爬虫爬取 Hudi MoR 表,利用 AWS Lake Formation 数据权限

在本节中,我们将探讨如何使用 AWS Glue 爬虫爬取 Hudi MoR 表。这一次,您将使用 AWS Lake Formation 的数据权限来爬取 Amazon S3 数据源,而不是 IAM 和 Amazon S3 权限。这是可选的,但当您的数据湖由 AWS Lake Formation 权限管理时,它可以简化权限配置。

前提条件

以下是本教程的前提条件:

完成前一部分 使用 AWS Glue 爬虫爬取 Hudi MoR 表,利用 AWS Lake Formation 数据权限。创建一个 IAM 用户 DataAnalyst,它具有 AWS 管理策略 AmazonAthenaFullAccess。

使用 Lake Formation 数据权限创建 Hudi 爬虫

请完成以下步骤来创建 Hudi 爬虫:

在 AWS Glue 控制台选择 爬虫。选择 创建爬虫。在 名称 中输入 hudimorcrawler,然后选择 下一步。

在 数据源配置 下,选择 添加数据源。

在 数据源 中选择 Hudi。在 包括 Hudi 表路径 中输入 s3//yours3bucket/data/samplehudimortable/。将 yours3bucket 替换为您的 S3 桶名称。选择 添加 Hudi 数据源。

选择 下一步。

对于 现有的 IAM 角色,选择您的 IAM 角色。在 Lake Formation 配置 可选 下,选择 使用 Lake Formation 凭证爬取 S3 数据源。

选择 下一步。

对于 目标数据库,选择 hudicrawlerblog。选择 下一步。

选择 创建爬虫。

现在新创建的 Hudi 爬虫已成功创建。该爬虫使用 Lake Formation 凭证爬取 Amazon S3 文件。我们来运行新爬虫:

选择 运行爬虫。等待爬虫完成。

爬虫运行后,您可以在 AWS Glue 控制台中看到 Hudi 表定义的两个表:

samplehudimortablero读取优化表

飞鱼加速器免费

samplehudimortablert实时表

您已使用 Lake Formation 注册了数据湖桶,并启用了使用 Lake Formation 权限爬取数据湖的访问权限。您成功爬取了 Amazon S3 上的数据的 Hudi MoR 表,并在 AWS Glue 数据目录中创建了已填充模式的表。创建 AWS Glue 数据目录上的表定义后,AWS 分析服务如 Amazon Athena能够查询 Hudi 表。

完成以下步骤以开始在 Athena 中查询:

介绍 Apache Hudi 支持与 AWS Glue 爬虫 大数据博客打开 Amazon Athena 控制台。

运行以下查询。

sqlSELECT FROM hudicrawlerblogsamplehudimortablert limit 10

以下是我们的输出截图:

运行以下查询。

sqlSELECT FROM hudicrawlerblogsamplehudimortablero limit 10

以下是我们的输出截图:

使用 AWS Lake Formation 权限进行细粒度访问控制

为了对 Hudi 表应用细粒度的访问控制,您可以充分利用 AWS Lake Formation 权限。Lake Formation 权限能让您限制特定表、列或行的访问,并通过 Amazon Athena 使用细粒度访问控制查询 Hudi 表。让我们为 Hudi MoR 表配置 Lake Formation 权限。

前提条件

以下是本教程的前提条件:

完成上文部分 使用 AWS Glue 爬虫爬取 Hudi MoR 表,利用 AWS Lake Formation 数据权限。创建一个 IAM 用户 DataAnalyst,拥有 AWS 管理策略 AmazonAthenaFullAccess。

创建 Lake Formation 数据单元过滤器

首先,为 MoR 读取优化表设置一个过滤器。

1