使用 AWS Step Functions 和 AWS Glue 编排基于 Amazon Redshift 的 ETL 工作流(一)

2020 年 1 月 02 日

使用 AWS Step Functions 和 AWS Glue 编排基于 Amazon Redshift 的 ETL 工作流(一)

Amazon Redshift 是云中完全托管的、PB 级的数据仓库服务,可借助与您今天所用相同的基于 SQL 的工具和商业智能应用程序,提供快速查询性能。许多客户还喜欢将 Amazon Redshift 用作提取、转换和加载 (ETL) 引擎,以使用现有的 SQL 开发人员技能集,快速迁移预先存在的基于 SQL 的 ETL 脚本,并且由于 Amazon Redshift 完全兼容 ACID,作为合并来自源数据系统的变更数据的有效机制。在本文中,我将展示如何使用 AWS Step FunctionsAWS Glue Python Shell 以完全无服务器的方式为那些基于 Amazon Redshift 的 ETL 工作流编排任务。AWS Glue Python Shell 是一个 Python 运行时环境,用于运行中小型 ETL 任务,例如提交 SQL 查询和等待响应。Step Functions 可让您将多个 AWS 服务协调到工作流中,从而可以轻松运行和监视一系列 ETL 任务。AWS Glue Python Shell 和 Step Functions 均无服务器,允许自动运行和扩展它们以响应定义的事件,而无需配置、扩展和管理服务器。尽管许多基于 SQL 的传统工作流都使用内部数据库结构(如触发器和存储过程),但将工作流编排、任务和计算引擎组件分离为独立的服务,使您可以独立开发、优化甚至重复使用每个组件。因此,尽管本博文以 Amazon Redshift 为例,但我的目的是更广泛地向您展示如何编排任何基于 SQL 的 ETL。


先决条件


如果您想使用自己的 AWS 帐户遵循本博文中的示例,则需要一个 Virtual Private Cloud (VPC),其至少具有两个到 S3 VPC 终端节点的路由的私有子网


如果您没有 VPC,或者不确定您的 VPC 是否满足这些要求,我提供一个 AWS CloudFormation 模板堆栈,您可以通过选择以下按钮将其启动。在首页上提供堆栈名称,其他所有内容保留默认设置。等待堆栈显示创建完成(这只需要几分钟),然后转到其他部分。



场景


对于本文中的示例,我使用 Amazon Customer Reviews Dataset 数据集构建 ETL 工作流,该工作流完成了以下两个代表简单 ETL 过程的任务。


  • 任务 1:将包含 2015 年及以后的评论的数据集的副本从 S3 移动到 Amazon Redshift 表。

  • 任务 2:生成一组输出文件到另一个 Amazon S3 位置,该位置按市场和产品类别标识“最有用”的评论,从而使分析团队可以收集有关高质量评论的信息。


该数据集可通过 Amazon Simple Storage Service (Amazon S3) 存储桶公开获得。完成以下任务以进行设置。


解决方案概览


下图突出显示了端到端的解决方案架构:



此过程中的步骤如下:


  1. 状态机启动一系列运行的 AWS Glue Python Shell 作业(有关如何以及为何我稍后在本博文中使用单个作业的更多信息!),并带有用于从 AWS Secrets Manager 检索数据库连接信息和从 S3 检索 .sql 文件的参数。

  2. AWS Glue Python Shell 作业每次运行时都使用数据库连接信息来连接到 Amazon Redshift 集群并提交.sql 文件中包含的查询。

  3. 对于任务 1:集群利用 Amazon Redshift Spectrum 从 S3 读取数据并将其加载到 Amazon Redshift 表中。Amazon Redshift Spectrum 通常用作将数据加载到 Amazon Redshift 的一种方式。(有关更多信息,请参阅 Amazon Redshift Spectrum 十二个最佳实践 的步骤 7。)

  4. 对于任务 2:集群执行聚合查询,然后通过 UNLOAD 将结果导出到另一个 Amazon S3 位置。

  5. 如果管道发生故障,状态机会将通知发送到 Amazon Simple Notification Service (SNS) 主题。

  6. 用户可以从集群查询数据和/或直接从 S3 检索报告输出文件。


我包括一个 AWS CloudFormation 模板以快速启动 ETL 环境,这样我可以将本博文重点放在专门用于构建任务和编排流程组件的步骤上。模板启动下列资源:


  • Amazon Redshift 集群

  • 用于存储 Amazon Redshift 集群信息和凭证的 Secrets Manager 密钥

  • S3 存储桶已预加载 Python 脚本和 .sql 文件

  • AWS Glue Python Shell 作业的 Identity and Access Management (IAM) 角色


请参阅以下资源,了解如何手动完成这些步骤:




确保至少选择两个专用子网和相应的 VPC,如以下屏幕截图所示。如果您从上方使用 VPC 模板,则 VPC 显示为 10.71.0.0/16,子网名称为 A privateB private.。



堆栈应该需要 10-15 分钟才能启动。一旦显示 Create Complete,您可以继续进行下一部分。请确保注意 AWS CloudFormation 控制台中的 Resources 选项卡,如以下屏幕截图所示,因为我在整个帖子中都引用了这些资源。



本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/orchestrate-amazon-redshift-based-etl-workflows-with-aws-step-functions-and-aws-glue/


2020 年 1 月 02 日 14:3485

评论

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

智能汽车安全风险及防护技术分析

几维安全

移动应用安全

核心稳定、易扩展——开放关闭原则(The Open-Closed Principle)

晃来晃去的萨麦尔

编程习惯 架构分析 软件设计原则

SpringBoot系列(三):SpringBoot特性_SpringApplication类(自定义Banner)

xcbeyond

Java 微服务 springboot Banner

我国开启“逆袭战”,区块链的盛夏来了?

CECBC区块链专委会

云计算 区块链技术

云图说丨手把手教你为容器应用配置弹性伸缩策略

华为云开发者社区

Docker 云计算 Kubernetes 容器 云容器引擎

看前谷歌工程师是如何副业赚钱的?

非著名程序员

程序员 个人成长 副业赚钱 提升认知

普通工程师简史

郭华

低/零代码会让程序员失业吗?

代码制造者

程序员 低代码 零代码 信息化 编程开发

SpringBoot 系列(一):SpringBoot项目搭建

xcbeyond

Java 微服务 springboot

《深度工作》学习笔记(6)

石云升

读书笔记 专注 深度工作

Django查看操作数据库的执行命令

Young先生

数据库 django 操作

关于微服务架构的一些思考

俊俊哥

微服务

奋斗在一线大城市的年轻人的生活工作实录(工厂蓝领篇)

Learun

程序员 软件开发 故事 企业信息化 短片小说

DSN 主流项目调研 3——Orbit数据库的故事

AIbot

区块链 分布式存储 IPFS 分布式文件 Orbit

《深度工作》学习笔记(完)

石云升

读书笔记 时间管理 专注 深度工作

HTML5CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第10章有路网PC端主页实战整合

Geek_8dbdc1

Windows AD日志分析告警平台—WatchAD安装教程

Young先生

监控 windows 日志 AD 告警

SpringBoot系列(二):如何灵活使用SpringBoot

xcbeyond

Java 微服务 springboot

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

JAVA位运算

彭阿三

Java 位运算

有限数据量如何最大化提升模型效果?百度工程师构建数据增强服务

百度大脑

人工智能 数据 模型训练 百度大脑

架构师训练营 第 10 周 作业&总结

Jam

神经网络的学习为何要设定损失函数?

王坤祥

神经网络 学习 损失函数

致远互联A6+Cloud C位出道 赋能中小企业乘风破浪

爱极客侠

解析中美数字货币竞争战略 | 构建属于“人类命运共同体”的货币体系

CECBC区块链专委会

数字货币 人民币

微软看上的Rust 语言,安全性真的很可靠吗

华为云开发者社区

数据库 开源 rust 安全 代码

Cobra 命令自动补全指北

郭旭东

go cobra

LeetCode题解:88. 合并两个有序数组,for循环合并数组+sort排序,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第11章有路网移动端主页实战

Geek_8dbdc1

Django中的session的使用

Young先生

django session Cookie

DSN 主流项目调研 2——Sia和SAFE Network

AIbot

区块链 分布式存储 分布式文件存储 Sia SAFENetwork

使用 AWS Step Functions 和 AWS Glue 编排基于 Amazon Redshift 的 ETL 工作流(一)-InfoQ