AWS Glue 数据目录现在支持 Apache Iceberg 表的存储优化 大数据博客

AWS Glue 数据目录新增对 Apache Iceberg 表的存储优化支持

关键点

  • AWS Glue 数据目录现可自动移除不再需要的 Apache Iceberg 表数据文件。
  • 此功能结合 Glue 数据目录的自动压缩功能,帮助降低元数据开销、控制存储成本,并提升查询性能。
  • Iceberg 支持快照管理,允许用户对数据进行时光旅行及回滚,但也可能与数据隐私法规如GDPR产生冲突。
  • 通过新特性,用户可控制快照和孤立文件的管理,简化数据管道维护过程。

AWS Glue 数据目录现在增强了对 Apache Iceberg 表的管理表优化功能,能够自动移除不再需要的数据文件。这一功能与 Glue数据目录的自动特性结合,能够显著降低元数据开销、控制存储成本并提高查询性能。

每当表中的数据发生变更时,Iceberg 会创建一个称为 快照 的新版本。Iceberg提供了时光旅行和回滚功能,使用户能够查询数据湖快照或回退到先前版本。然而,随着表的改动,创建的数据文件也在不断增加。此外,在写入 Iceberg表时发生的任何故障,都会创建未在快照中引用的数据文件,这些文件被称为 孤立文件 。虽然时光旅行功能非常有用,但可能与需要永久删除数据的法规(如GDPR)相矛盾。因此,很多组织创建了自定义数据管道,定期撤销不再需要的快照并删除孤立文件,然而构建这些自定义管道既耗时又昂贵。

此次发布后,您可以启用 Glue数据目录的表优化功能,来管理快照及孤立数据,并与压缩功能结合使用。您可以通过提供默认保留期限及设置孤立文件的最大保留天数进行配置。Glue数据目录将每天监控表格,移除过时的快照及不再需要的数据文件和孤立文件。Glue 数据目录将遵循 Iceberg分支和标签中引用快照的保留策略。您如今能获得一个始终优化的 (Amazon S3) 布局,通过自动移除已过期的快照和孤立文件来实现。您可以在

数据目录控制台的表优化选项卡中查看已删除的历史数据、清单、清单列表和孤立文件。

在本文中,我们将展示如何在 Apache Iceberg 表上启用管理的保留和孤立文件删除,以实现存储优化。

解决方案概述

在本节中,我们使用名为 customer 的表,该表位于 iceberg_blog_db 数据库中,数据由流应用程序不断添加——每 10分钟大约添加 10,000 条记录(文件大小小于 100 KB),并包括变更数据捕捉 (CDC)。客户表的数据及元数据存储在 S3桶中。由于数据的更新和删除是 CDC 的一部分,表中数据发生更改时会创建新的快照。

此表启用了管理压缩以优化查询,结果是当压缩将多个小文件重新写入几个紧凑文件时,会生成新的快照,而旧的小文件会留在存储中。这导致 Amazon S3中的数据和元数据迅速增长,这可能会带来高昂的成本。

快照是 Iceberg表的时间戳版本。快照保留配置允许客户强制实施保留快照的时间和数量。配置快照保留优化器可以通过删除过时的不必要快照及其底层文件来帮助管理存储开销。

孤立文件是指不再被 Iceberg 表元数据引用的文件。这些文件可能随着时间的推移而累积,特别是在执行表删除或 ETL工作失败等操作后。启用孤立文件删除可以让 AWS Glue 定期识别并移除这些不必要的文件,从而释放存储空间。

以下图表展示了系统架构。

![architecture](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-gdc- 删除)

接下来的部分中,我们将展示如何在 AWS Glue 管理的 Iceberg 表上启用管理的保留和孤立文件删除。

准备工作

确保您有一个 AWS账户。如果您还没有账户,可以创建。

使用 AWS CloudFormation 设置资源

本文提供一个 CloudFormation 模板,用于快速设置。您可以根据需要查看并自定义该模板。该模板将生成以下资源:

  • 一个用于存储数据集、Glue 作业脚本等的 S3 桶
  • 数据目录数据库
  • 一个 AWS Glue 作业,每 10 分钟在您的 S3 桶中创建和修改示例客户数据,并配有触发器
  • (AWS IAM) 角色和策略——glueroleoutput

要启动 CloudFormation 堆栈,请按以下步骤操作:

  1. 登录 AWS CloudFormation 控制台。 删除)](https://console.aws.amazon.com/cloudformation/home?#/stacks/new?templateURL=https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/BDB-4416/icebergdatalakesetup.yaml&stackName=glue-iceberg-optimization)
  2. 选择 Next
  3. 保持参数默认或根据需求进行适当更改,然后选择 Next
  4. 在最后一页上检查详细信息,并选择 我确认 AWS CloudFormation 可能会创建 IAM 资源
  5. 选择 Create

这个堆栈可能需要大约 5-10 分钟才能完成,此后您可以在 AWS CloudFormation 控制台查看已部署的堆栈。

![CFN](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-CFN- 删除)

记下角色 glueroleoutput 的值,以便在启用优化设置时使用。

在 Amazon S3 控制台中,记下 Amazon S3 桶,您可以监控数据每 10 分钟将持续更新一次的情况。

![S3删除)

启用快照保留

我们希望移除超过 1 天的快照的元数据和数据文件,并限制保留快照的数量最多为 1。要启用快照失效,您需在 customer 表上启用快照保留,设置保留配置,如下所示,AWS Glue 会运行后台操作进行这些表维护操作,并每天执行一次。

  1. 登录 AWS Glue 控制台并作为管理员身份操作。
  2. 在导航窗格下的 Data Catalog 中,选择 Tables
  3. 搜索并选择 customer 表。
  4. Actions 菜单中,选择 Enable 下的 Optimization
    ![GDCtable](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-gdc- 删除)
  5. 选择 Snapshot retention 来指定您的优化设置。
  6. Optimization configuration 下,选择 Customize settings 并提供以下信息:
  7. 对于 IAM role ,选择在 CloudFormation 资源中创建的角色。
  8. Snapshot retention period 设置为 1 天。
  9. Minimum snapshots to retain 设置为 1。
  10. Delete expire files 选择 Yes
  11. 选中确认框,选择 Enable

![optimizationenable](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-gdc- 删除)

另外,您也可以安装或更新最新版本的 (AWSCLI),按照说明启用快照保留。要获取指引,请参考 。使用以下代码启用快照保留:

bash aws glue create-table-optimizer \ --catalog-id 112233445566 \ --database-name iceberg_blog_db \ --table-name customer \ --table-optimizer- configuration '{ "roleArn": "arn:aws:iam::112233445566:role/<glueroleoutput>", "enabled": true, "retentionConfiguration": { "icebergConfiguration": { "snapshotRetentionPeriodInDays": 1, "numberOfSnapshotsToRetain": 1, "cleanExpiredFiles": true } } }' \ --type retention \ --region us-east-1

启用孤立文件删除

我们希望移除不再被快照引用的超过 1 天的元数据和数据文件,并限制保留快照的数量最多为 1。完成以下步骤以在 customer 表上启用孤立文件删除,AWS Glue 会运行后台操作进行这些表维护操作,并每天执行一次。

  1. Optimization configuration 下,选择 Customize settings 并提供以下信息:
  2. 对于 IAM role ,选择在 CloudFormation 资源中创建的角色。
  3. Delete orphan file period 设置为 1 天。
  4. 选中确认框,选择 Enable

另外,您也可以使用 AWS CLI 启用孤立文件删除:

bash aws glue create-table-optimizer \ --catalog-id 112233445566 \ --database-name iceberg_blog_db \ --table-name customer \ --table-optimizer- configuration '{ "roleArn": "arn:aws:iam::112233445566:role/<glueroleoutput>", "enabled": true, "orphanFileDeletionConfiguration": { "icebergConfiguration": { "orphanFileRetentionPeriodInDays": 1 } } }' \ --type orphan_file_deletion \ --region us-east-1

根据优化器配置,您将开始在 AWS Glue 数据目录中看到优化历史记录。

![runs](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-gdc- 删除)

验证解决方案

要验证快照保留和孤立文件删除的配置,请按照以下步骤操作:

  1. 登录 AWS Glue 控制台并作为管理员身份操作。
  2. 在导航窗格下的 Data Catalog 中,选择 Tables
  3. 搜索并选择 _customer_ 表。
  4. 选择 Table optimization 选项卡以查看优化作业运行历史。

![runs](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/08/26/bdd-4416-gdc- 删除)

另外,您也可以使用 AWS CLI 验证快照保留:

bash aws glue get-table-optimizer --catalog-id 112233445566 --database-nameiceberg_blog_db --table-name customer --type retention

您还可以使用 AWS CLI 验证孤立文件删除:

bash aws glue get-table-optimizer --catalog-id 112233445566 --database-nameiceberg_blog_db --table-name customer --type orphan_file_deletion

监控 CloudWatch 指标以了解 Amazon S3

以下指标显示,随着客户数据流的进行及 CDC的发生,桶的大小急剧增加,导致快照创建的元数据和数据对象的增加。当启用快照保留("snapshotRetentionPeriodInDays ":1,"numberOfSnapshotsToRetain ":50)与孤立文件删除("orphanFileRetentionPeriodInDays ":1)时,客户前缀的总桶大小和对象总数会下降,维护工作完成后最终实现存储优化。

删除)

清理

为了避免将来的费用,请删除您在 Glue、数据目录和用于存储的 S3 桶中创建的资源。

结论

Iceberg 的两个关键特性是时光旅行和回滚,允许用户查询数据在之前时刻的状态,并回退不希望的表变更。这一过程通过 Iceberg快照的概念得以实现,快照是数据在某一时间点的完整数据文件集。随着这些新版本的发布,数据目录现在提供了存储优化的功能,可以帮助您减小元数据开销、控制存储成本,提高查询性能。

要了解有关使用 AWS Glue 数据目录的更多信息,请参考 。

感谢所有为此次发布作出贡献的人员:Sangeet Lohariwala、Arvin Mohanty、Juan Santillan、SandyaKrishnanand、Mert Hocanin、Yanting Zhang 和 Shyam Rathi。


作者介绍

删除)SandeepAdwankar 是 AWS 的高级产品经理,常驻加利福尼亚湾区,负责与全球客户合作,将商业和技术需求转化为能够提升客户管理、保护和访问数据的产品。

删除)SrividyaParthasarathy 是 AWS Lake Formation 团队的资深大数据架构师,热衷于构建数据网格解决方案并与社区分享。

删除)PaulVillena 是 AWS的高级分析解决方案架构师,专注于构建现代数据和分析解决方案以推动商业价值。他帮助客户充分利用云的力量,感兴趣的领域包括基础设施即代码、无服务器技术及 Python 编码。

标签: ,,

Leave a Reply

Required fields are marked *