对于数据科学家来讲,每天花费的大量时间主要在解决实际业务问题上,需要分析和收集支持信息,得出问题的结论。很多情况下,特定的任务和目标可能都需要一个人来完成,而开发ETL又是必不可少的工作,什么样的平台可以满足他们的需求?
轻量化,免运维,交互式展现,自动化的工作流,可视化的监控,这些只需要在Jupyter Notebook中操作,就可以轻松地准备和加载数据以供分析。
???? 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注2021亚马逊云科技中国峰会!点击图片报名吧~
在本文中,我们将利用无服务器架构工作流,用于表结构的爬取和执行ETL作业,从而实现上述步骤的自动化和可视化。
用产品的方式来解决,他们习惯用Python代码在Jupyter Notebook中开发,图形化展示各种数据。创建可视化的端到端的工作流程,以最终输出结果为导向。跟业务无关的工作,其实是可以用产品的方式解决的。
那么减少人工重复工作,监控每个任务的运行状态和日志记录,实现整个流程的自动化。
方案概述
本文将以一个常见的使用场景,通过Amazon Step Functions Data Science SDK创建基于无服务器架构的工作流,过程如下:
1. 创建Amazon Lambda调用Amazon Glue进行Crawler工作,识别数据格式和Schema
2. 创建Amazon Lambda检查Amazon Glue Crawler工作状态,如果返回值为null,即认为Crawler执行完成
3. 使用Amazon Glue进行ETL工作,生成样本数据集
下图演示了上述Amazon Step Functions无服务器架构工作流:
后续操作使用了下列亚马逊云科技服务:
Amazon Step Functions ,是由多个离散步骤组成的状态机,其中每个步骤都可以执行任务、作出选择、启动并行执行或管理超时。其中一个步骤的输出作为下一个步骤的输入,并支持将错误处理嵌入到工作流中。
Amazon Step Functions
https://www.amazonaws.cn/step-functions/
Amazon Step Functions Data Science SDK,相比较Amazon Step Functions ,使用Python代码轻松创建、执行和可视化Amazon Step Functions工作流,而不是只能使用基于JSON语言定义Amazon Step Functions。
本文以Amazon Step Functions Data Science SDK为主线,讨论如何创建Amazon Step Functions步骤、使用参数、集成服务特定的功能,将这些步骤关联在一起,创建和可视化工作流。
Amazon Step Functions Data Science SDK
https://docs.amazonaws.cn/zh_cn/step-functions/latest/dg/concepts-python-sdk.html
Amazon Step Functions
https://www.amazonaws.cn/step-functions/
Amazon Glue是一项完全托管的提取、转换和加载(ETL)服务,在分布式Apache Spark环境中运行,能够充分利用Spark而无需管理基础设施。
Amazon Glue
https://www.amazonaws.cn/glue/
1.创建Amazon Glue Crawler和Amazon Glue Job
在控制面板中创建Amazon Glue Crawler,请参考手册
https://docs.aws.amazon.com/zh_cn/glue/latest/dg/console-crawlers.html
在控制面板中创建Amazon Glue Job,请参考手册
https://docs.aws.amazon.com/zh_cn/glue/latest/dg/add-job.html
2. 创建两个Amazon Lambda Functions
2.1 首先,创建一个启动Crawler作业的Amazon Lambda Functions,命名为Crawler_initial,本环境使用Python 3.8 Runtime
2.2 创建一个新的Role,或者使用已有的Role,这个Role必须有访问Amazon Glue的权限
2.3 在IAM下查看Role所关联的策略,关联“Amazon GlueServiceRole”
2.4 在已有的Amazon lambda_function.py中可以直接编写代码,并点击“Deploy”部署
2.5 下边为执行Crawler的代码,要指定crawlername,点击“Test”,可以在“Execution results”中看到相关的日志
2.6 其次,创建一个检查Crawler作业状态的Amazon Lambda Functions,创建过程不再赘述,代码如下
3. 创建Jupyter Notebook
3.1 创建Amazon SageMaker 笔记本实例
3.2 创建一个笔记本实例,类型选择t2.medium。选择或者创建一个IAM角色(IAM Role),其他部分选择默认选项,点击创建(Create)
3.3 笔记本创建完成后,打开Jupyter,选择New,新建一个ipynb,选择内核为conda_python3
4. 使用Amazon Step Functions
Data Science SDK创建和定义工作流
4.1 安装和加载必需的模块
4.2 在Console创建一个Role附加到Amazon Step Functions
4.3 定义Step,指定Execute Crawler的Amazon Lambda名字
4.4 定义Step,指定Check Crawler Status的Amazon Lambda名字
此处采用retry的方式来检查Crawler是否完成,建议先手工执行Crawler评估需要的时间,再定义间隔时间
4.5 定义Step,指定执行Amazon Glue Job的名字
5. 运行上述Workflow
指定Workflow Name
5.1 新建名为My-ETL-workflow01的工作流
5.2 生成图示
5.3 执行Work flow,可以看到不同的颜色代表不同的状态,完整执行过程的图示如下
5.4 如果执行失败,可以查看events
6. 总结
本文讨论的是使用Amazon Step Functions Data Science SDK,创建一个基于无服务器架构的数据ETL工作流。对于数据科学团队来讲,这些步骤都可以在Notebook中完成,而且可以通过Amazon Step Functions监控每个任务的运行状态和日志记录,最终实现整个流程的自动化,减少数据科学家的人工重复工作,提高生产开发效率。
关于ETL流程的自动化,Amazon Glue也自带了Workflows方式来实现,和Amazon Step Functions相比较,Amazon Glue Workflows是编排内部作业和爬网程序,如果调用Amazon Glue之外的其他亚马逊云科技服务,需要使用Amazon Step Functions。
Amazon Glue Workflow和事件驱动的方式来实现ETL流程的自动化,可参考下边的链接:
如何使用Amazon Glue工作流在爬网程序运行完成时自动启动作业?
https://aws.amazon.com/cn/premiumsupport/knowledge-center/start-glue-job-after-crawler-workflow/?nc1=h_ls
如何使用Amazon Lambda函数在爬网程序运行完成时自动启动Amazon Glue作业?
https://aws.amazon.com/cn/premiumsupport/knowledge-center/start-glue-job-crawler-completes-lambda/?nc1=h_ls
7. 参考资料
[1]aws-step-functions-data-science-sdk-python
https://github.com/aws/aws-step-functions-data-science-sdk-python
[2]AWS Step Functions Data Science SDK – Compute
https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/compute.html
本篇作者
缪翰林
亚马逊云科技解决方案架构师
负责基于亚马逊云科技的方案咨询,设计和架构评估。在运维,DevOps方面有丰富的经验,目前侧重于大数据领域的研究。
听说,点完下面4个按钮
就不会碰到bug了!