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 定期识别并移除这些不必要的文件,从而释放存储空间。
以下图表展示了系统架构。

接下来的部分中,我们将展示如何在 AWS Glue 管理的 Iceberg 表上启用管理的保留和孤立文件删除。
确保您有一个 AWS账户。如果您还没有账户,可以创建。
本文提供一个 CloudFormation 模板,用于快速设置。您可以根据需要查看并自定义该模板。该模板将生成以下资源:
glueroleoutput
要启动 CloudFormation 堆栈,请按以下步骤操作:
这个堆栈可能需要大约 5-10 分钟才能完成,此后您可以在 AWS CloudFormation 控制台查看已部署的堆栈。
记下角色 glueroleoutput 的值,以便在启用优化设置时使用。
在 Amazon S3 控制台中,记下 Amazon S3 桶,您可以监控数据每 10 分钟将持续更新一次的情况。

另外,您也可以安装或更新最新版本的 (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 会运行后台操作进行这些表维护操作,并每天执行一次。
另外,您也可以使用 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 数据目录中看到优化历史记录。

要验证快照保留和孤立文件删除的配置,请按照以下步骤操作:
_customer_
表。
另外,您也可以使用 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
以下指标显示,随着客户数据流的进行及 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