在 AWS 湖仓架构中使用可重用的 ETL 框架
关键要点
数据湖和湖仓架构已成为任何组织数据平台中不可或缺的一部分。在构建湖仓平台时,可能会遇到各种技术挑战。采用可重用的 ETL 框架,可以提高开发效率、减少错误并简化管道管理。框架支持多种数据摄取模式,包括拉取和推送。通过元数据驱动的方法,可创建灵活且易维护的数据管道。数据湖和湖仓架构已经成为任何组织数据平台的重要组成部分。然而,在开发湖仓平台并与各种源系统集成时,您可能会面临多重挑战。本文将探讨这些挑战,并展示我们的框架如何帮助缓解这些问题。
使用 AWS 的湖仓架构
下图展示了在 Amazon Web Services (AWS) 环境中典型的湖仓实现。
外网VNP加速在此图中,我们有五个层级。层数和名称可能会因环境需求而异,请查看 建议的数据层 以获取更多细节。
层级描述登台层所有数据源文件以原始格式放置于此。原生层所有数据源文件转换并存储为通用的 Parquet 格式。阶段层维护维度表的历史信息,采用慢变维类型2 (SCD2)。利用 Apache Hudi 在 Amazon S3 存储桶中实现 SCD2,并通过 AWS Glue 作业写入 Hudi 表。展示层使用 AWS Glue 作业,根据业务需求对数据进行清洗、验证和转换。数据仓库层Amazon Redshift 被用作数据仓库,存放经过梳理或清洗的数据。可以通过 AWS Glue python shell 作业复制数据或从 Amazon S3 位置创建 Spectrum 表。湖仓架构展示了两种数据摄取模式:拉取 和 推送。在 拉取型 摄取中,像 AWS Glue 或 AWS Lambda 的服务用于将数据从数据库、API 或平面文件中拉入数据湖。在 推送型 模式中,第三方源可以直接将文件上传到数据湖的登台 Amazon S3 存储桶中。使用 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 来协调数据管道,将数据从源系统移动到数据仓库。 Amazon EventBridge 用于调度 Airflow 定向无环图 (DAG) 数据管道。Amazon RDS for PostgreSQL 用于存储数据管道的元数据。具备这些能力的数据湖架构提供了可扩展、可靠且高效的数据管道解决方案。
数据管道挑战
维护大型湖仓环境中的数据管道可能非常具有挑战性。会面临多种常见的障碍。为每个 Airflow DAG 创建独立的 AWS Glue 作业可能导致需要管理数百个 AWS Glue 作业。随着管道数量的增加,错误处理和作业重启变得愈加复杂。从头开发一个新的数据管道需要较长时间,因为涉及到大量的模板代码。生产支持团队在监控和支持如此大量的数据管道时可能面临挑战。在这样的大规模环境中,平台监控变得异常繁琐。确保湖仓中数据管道的整体可维护性、健壮性和管理性是一项持续的挑战。
数据管道框架的好处
采用数据管道框架可以显著减少构建数据管道所需的努力。这个框架应该建立一个易于维护和管理的湖仓环境,还应提高代码在数据管道之间的重用性。框架中的有效错误处理和恢复机制应使数据管道更具稳健性。支持批量、微批量和流式等多种数据摄取模式使框架更加多功能。一个具备这些能力的框架将帮助您构建可扩展、可靠和灵活的数据管道,同时减少时间和精力的投入。
可重用的 ETL 框架
在元数据驱动的可重用框架中,我们预先创建了不同用途的模板。元数据表用于配置数据管道。
下图展示了这个框架的架构:
在这个框架中,预先创建了不同用途的 AWS Glue 模板,例如从 SFTP 复制文件到登台存储桶、从数据库获取行、将登台中的文件格式转换为原生层的 Parquet 格式、写入 Hudi 表以及将 Parquet 文件复制到 Redshift 表等。
这些模板存储在模板存储桶中,所有模板的详细信息保存在带有 templateid 的模板配置表中,使用 Amazon Relational Database Service (Amazon RDS)。每个数据管道 (Airflow DAG) 在主作业配置表中表示为一个 flowid。每个 flowid 可以具有一个或多个任务,每个任务指向一个 templateid。该框架可以支持两种摄取类型拉取型 (定时管道) 和 推送型 (发起的管道)。以下步骤展示了图 2 中管道的详细流向。
要调度管道,“定时 DAG 调用器 Lambda”在 EventBridge 中调度,with flowid 作为参数。源将文件放入登台存储桶。事件被触发并调用“触发的 DAG 调用器”Lambda。此 Lambda 函数从事件中获取文件名以调用 Airflow API。Lambda 函数查询 RDS 元数据表,以参数获得 DAG 名称。两个 Lambda 函数调用 Airflow API 来启动 DAG。Airflow webserver 从 S3 位置查找 DAG 并将其传递给执行器。DAG 被启动。DAG 调用带有所有所需参数的公共工具 Python 脚本中的函数。对于任何管道,工具脚本从元数据表获取所有任务详细信息以及 AWS Glue 模板名称和位置。对于任何数据库或 API 连接,工具函数根据 secretid 从 AWS Secrets Manager 获取秘密凭证。来自 S3 位置的 AWS Glue 模板文件使用 Boto3 API 启动 AWS Glue 作业,并传递所需参数。一旦 AWS Glue 作业成功完成,它会删除该作业。如果管道包含任何 Lambda 调用,工具脚本会根据配置参数调用 Lambda 函数。如果 AWS Glue 作业因第11步中的任何错误失败,脚本会捕获错误消息并发送 Amazon Simple Notification Service (Amazon SNS) 通知。在开发任何新管道时,开发人员必须确定需要为 DAG 创建的任务数量。识别哪个任务可以使用哪种模板,并相应地向元数据表插入配置条目。如果没有可用模板,则创建新的模板以便以后重用。最后,创建 Airflow DAG 脚本并将其放置在 DAG 位置。
结论
所建议的框架利用 AWS 原生服务提供可扩展和性价比高的解决方案。由于可重用组件,它允许更快的开发。您可以根据需要动态生成和删除 AWS Glue 作业。此框架通过配置表启用作业跟踪,支持错误处理,并提供电子邮件通知。您可以创建定时和事件驱动的数据管道,从各种来源摄取不同格式的数据。还可以通过更新配置参数而不需要更改任何代码来调整 AWS Glue 作业的性能和成本。
可重用框架是一种良好的开发实践,可以提高市场响应速度,并在团队中标准化开发模式。该框架可以在任何 AWS 数据湖或湖仓环境中使用,并支持任意数量的数据层。这使得管道开发变得更快,而错误处理和支持也更加简化。您甚至可以进一步增强和自定义,以获得更多如数据核对、微批处理管道等特性。
推荐阅读:
使用 AWS Glue 蓝图将数据从数据库加载到数据湖使用 Apache Hudi、AWS Glue、AWS DMS 和 Amazon Redshift 创建源到湖仓的数据复制管道用于基准和指数分析的时间数据湖架构作者
Ashutosh Dubey
Ashutosh 是来自美国新泽西的亚马逊网络服务的全球技术领导者与解决方案架构师。他在数据、分析和机器学习领域具有丰富经验,并曾帮助财富500强公司迈向 AWS 云。

Prantik Gachhayat
Prantik 是 Infosys 的企业架构师,拥有超过19年的多领域技术及业务经验。他在帮助大型企业现代化数字平台和交付复杂转型项目方面有着有目共睹的成绩,尤其擅长在 AWS 中设计现代数据与分析平台。他热衷于探索新技术趋势并享受烹饪。
保持对 Amazon Monitron 的访问并考虑替代方案 机器学习博客
维持 Amazon Monitron 访问及考虑替代方案重点摘要Amazon Monitron 将于 2024 年 10 月 31 日起停止对新客户的服务。 现有客户仍然可以正常购买设备并使用服务。为...
通过与 AWS Lake Formation 集成的 Amazon EMR 在开放表格格式上实施精细
利用 Amazon EMR 与 AWS Lake Formation 强化开放表格式的细粒度访问控制重点摘要Amazon EMR 615 版推出基于 AWS Lake Formation 的细粒度访问...