写点什么

基于亚马逊云服务建数据仓库的数据流设计与架构

  • 2021-08-26
  • 本文字数:2510 字

    阅读完需:约 8 分钟

基于亚马逊云服务建数据仓库的数据流设计与架构

本文最初发表于 Medium 博客,经原作者 Abhijit Patil 授权,InfoQ 中文站翻译并分享。


在本文中,我们将介绍使用原生 AWS 服务构建 ETL 流程的众多设计之一,以及如何集成这些设计来构建端到端数据管道。



AWS 数据流(ETL)


在上图中,它代表了数据管道的四个主要方面,即数据摄取(Data Ingestion,E)、数据转换(Data Transformation,T)、数据加载(Data Load,L)和服务(Service,S)。


数据摄取(E)


在将数据从企业内部摄取到 AWS S3 中,还有很多其他模式。在这个流程中,我们代表了使用 HTTP 接口摄取数据的模式之一。其他模式可以使用 AWS 数据迁移服务,详情可参阅:https://aws.amazon.com/cloud-data-migration/


a. 文件上传器 API


HTTPs API 使用托管在 EC2 上的 Spring boot 应用程序来上传/下载数据。这支持数据的多部分上传。


你可以使用 Spring boot 框架来编写文件上传器 API,并将其托管在自动伸缩的 EC2 上。要创建 Java 服务器端的文件上传器程序,请参考这个简单指南:https://spring.io/guides/gs/uploading-files/


要让这个应用程序更具弹性,你可以将 ELB 和 Amazon EC2 Auto Scaling 添加到应用程序前面。


b. 数据移动到 S3


一旦收到数据文件,应用程序将暂时把数据保存在 EBS 卷中,然后使用 AWS SDK,可以把它移动到 S3 存储桶(Staging)。当数据移动到 S3 时,将会引发 S3 事件。通过该事件,可以触发 Lambda 函数,然后通过调用 Step 函数来触发 ETL 工作流。


注:S3 staging 存储桶将主要保存从源接收的原始数据。


数据转换(T)


强烈建议将可能是各种格式(如 JASON、XML、CSV 或任何其他格式)的原始数据转换成统一的数据格式,如数据湖(Data Lake)中的 parquet 格式。这样就能使数据湖的数据的标准化。


将按照下列高级步骤进行数据转换:


在 Step 函数工作流中,所有 ETL 转换阶段将被定义,一旦数据通过 Lambda 函数登陆到 staging S3 存储桶,该工作流就会被触发。工作流的第一阶段将是日期控制检查或业务日期检查,这将使用 Lambda 来完成,它在内部访问 DynamoDB,该数据库将存储日期控制和假日日历表。在上图中用箭头 4、5 和 5a 表示。在执行任何数据操作之前,Step 函数(状态机)的第一步是检查文件的完整性,例如校验和检查、行计数检查等,然后调用 Glue Crawler(爬网程序)来更新 Glue Catalog 中的模式,以获得新的数据。Step 函数的第二步将调用 Glue 作业,该作业将从 S3 存储桶的 staging 层读取数据,并将其转换为 parquet 格式,然后将最终的 parquet 文件写入 S3 持久层(数据湖)存储桶中。


注:一旦所有处理完成,可以调用相同的 Lambda 函数来更新 DynamoDB 中工作流的状态。


数据加载(L)


数据加载是将数据从持久层(数据湖)S3 存储桶加载到 Redshift 中。Redshift 将作为数据仓库或数据集市使用,用于定义域数据模型。


将按照下列高级步骤进行数据加载:


在成功完成 Step 函数的第二步后,将触发 Step 函数的第三步。Step 函数的第三步将触发另一个 Glue 作业(Glue Python shell 作业),它将执行 SQL(来自 Artefact 的 S3 存储桶),将数据从 S3 存储桶复制到 Redshift 表中。一旦数据加载完成,Lambda 将更新 DynamoDB 中工作流的状态。


注:在 SQL 函数中,你可以使用所有的业务逻辑。对于其他需要复杂转换的用例中,你可以调用 Glue Job 并调用 Java/Scala 代码。


错误处理与服务集成


在这种方法中,我们创建了一个通用的 Lambda 函数,如果 Step 函数中的任何步骤失败,就会调用这个函数。然后这个 Lambda 函数更新 Dynamo DB 审计表的状态。该 Lambda 函数参考了 S3 代码 Artefact 存储桶中的代码。


在 DynamoDB 审计表中的每一次插入都会生成一个触发器,该触发器将调用通用错误处理 Lambda,而该触发器又可以调用内部的 API,以提出服务工单(service ticket)或发送关于任何失败/警告的电子邮件。


设计中使用的工具/服务


我们主要使用以下 AWS 原生服务来实现数据管道:


  1. AWS Lambda:这主要用于整合不同的服务。我们不建议在 Lambda 函数中加载大量的业务逻辑。在这个设计中,Lambda 被用于:


捕获 S3 文件生成事件。触发相应的 ETL 工作流程(Step 函数)。捕获 DynamoDB 表中的审计信息。如果需要,触发其他依赖性的 AWS 服务,如 Glue Crawler,Athena 查询,API 网关等。


  1. AWS Step 函数:这是一个简洁的图形化表示,用来定义作业的子任务的相互依赖关系。


帮助定义/执行工作流中特定数据文件的不同任务。不同的任务可以是胶水作业(glue job)或 Lambda 函数。


  1. AWS Glue Job:这主要用于计算/转换作业。


从 S3 staging 层存储桶中读取数据。将数据文件转换为 parquet 格式。触发 Redshift 的 SQL 查询,将 S3 存储桶加载数据或从 S3 存储桶卸载数据。


  1. AWS DynamoDB:在这个设计中,我们用来保存与 ETL 作业相关的元数据,并维护作业执行的审计。这有助于维护 ETL 管道元数据。ETL 管道元数据可以是:

  • 每个数据文件的日期控制信息;

  • 每个数据文件的假日日历信息(工作流/Gluejob);

  • 胶水作业依赖性的元数据;每个数据文件/工作流/胶水作业的审计信息。


  1. AWS Redshift:用于定义域数据模型,在该模型中可以建立 Star 或 snowflake 模式来表示事实和维度。


这将主要用于创建数据仓库/数据集市。


  1. https://aws.amazon.com/cloudwatch/:用于监控作业的执行情况并发出警报。


捕捉跨不同工作流和 AWS 服务的日志信息。在出现错误/警告等情况下生成 CloudWatch 事件/警报。


  1. Amazon API Gateway


调用企业内部的 API 来发送任何操作事件/信息,如故障、警告、操作统计等。


  1. Amazon EC2/EBS:


托管文件上传器应用程序和服务,将数据传输到 S3。EBS 将作为文件上传器应用程序的存储平台,并临时存储数据文件。


总结


这是在 AWS 上实现数据管道的一种方法,通过设计和使用无服务器或托管服务的 AWS 原生服务,可以实现弹性。


作者介绍:


Abhijit Patil,云数据工程和架构总监,擅长构建企业规模的产品和服务,在各种技术和金融领域拥有 20 多年的丰富经验。

Hukumchand Shah: 工程副总裁,专业从事云数据工程,大数据、微服务、领导力和健康爱好者。


原文链接:


https://medium.com/ibrains-cloud-data-engineering/aws-data-pipeline-design-and-architecture-fbfe4b3f5849

2021-08-26 12:143897

评论

发布
暂无评论
发现更多内容

带你认识Flink容错机制的两大方面:作业执行和守护进程

华为云开发者联盟

flink 守护进程 容错 作业执行 Flink 容错机制

华为自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)

华为云数据库小助手

数据库 GaussDB(for Influx) 华为云数据库

经典永流传,华为云媒体 AI 让老电影焕发新生

华为云开发者联盟

AI 云原生 音视频 电影修复 华为云媒体

模型化生存

俞凡

认知

经典Android开发教程!腾讯T3团队整理,附小技巧

欢喜学安卓

android 程序员 面试 移动开发

Linux之touch命令

入门小站

Linux

在线html链接提取工具

入门小站

工具

🏆「作者推荐」【JVM原理探索】字节码指令集调用执行流程分析(语法分析篇)

码界西柚

JVM Class字节码 6月日更 字节码指令

什么是网络流量劫持?

网络安全学海

网络安全 安全 渗透测试 安全漏洞 网络攻防

一分钟懂5G

俞凡

5G

TDH8.0使用必读2: 10种数据模型全支持 未来属于多模型大数据平台

星环科技

NeoFetch - Linux 使用命令行查看系统信息

HoneyMoose

JavaScript学习(九)

空城机

JavaScript 大前端 6月日更

华为云官网前端的技术演进与低代码实践

华为云开发者联盟

大前端 低代码 可视化 页面 华为云官网

公司给的期权有没有价值?

石云升

期权 职场经验 6月日更

云小课 | 华为云KYON:网段零修改上云,简单又好用

华为云开发者联盟

KYON企业级云网络 私网NAT网关 弹性负载均衡ELB 虚拟私有云VPC L2CG VPVEP

星环科技边缘计算平台Sophon Edge通过EC Ready边缘服务权威评测!

星环科技

“动态规划”这词太吓人,其实可以叫“状态缓存”

华为云开发者联盟

Java 动态规划 超时 dp数组 状态缓存

Swarm云算力矿机分币系统搭建,chia矿机系统源码

JAVA原生线程池源码解析及使用建议( 程序员必看!)

Java 面试 BAT

Ubuntu 安装 NTP 服务

HoneyMoose

重磅!北京区域已经推出第三个可用区啦

亚马逊云科技 (Amazon Web Services)

redis面试知识点和内存算法了解

收藏!阿里P9耗时28天,总结出来了“618、双十一”活动高并发系统设计手册

Java 程序员 架构 面试 高并发

肝到头秃!阿里爆款的顶配版Spring Security笔记

Java 程序员 架构 面试 计算机

THOR:MindSpore 自研高阶优化器源码分析和实践应用

华为云开发者联盟

网络 mindspore THOR 高阶优化器 THOR算法

四份深入源码层面笔记,学完后让你彻底精通Spring Cloud!

Java架构追梦

Java 架构 面试 微服务 SpringCloud

什么是NQI?质量基础设施“一站式”服务平台我来帮你搭建

源中瑞-龙先生

NQI 质量基础设施“一站式”

[译] R8 优化: Switch 场景下的枚举

Antway

6月日更

zookeeper客户端zkclient和curator的api

赵镇

zookeeper

拥抱数字娱乐家庭新生态,亚马逊云科技赋能智象“蛟龙出海” | 精选案例

亚马逊云科技 (Amazon Web Services)

基于亚马逊云服务建数据仓库的数据流设计与架构_架构_Abhijit Patil_InfoQ精选文章