发布于: Aug 22, 2022

本文将介绍如何使用 Amazon Web Services Glue 编写 ETL 作业进行数据监视和通知。

Amazon Web Services Glue 提供托管的 Apache Spark 环境来运行 ETL 作业,无需利用按需付费模式来维护任何基础设施。

打开 Amazon Web Services Glue 控制台,然后选择 ETL 部分下的作业来开始编写 Amazon Web Services Glue ETL 作业。为作业指定您选择的名称并记下该名称,因为稍后您将需要使用该名称。选择已创建的 IAM 角色(名称中包含 – GlueLabRole),如下所示。保留其他默认选项。

Amazon Web Services Glue 会生成所需的 Python 或 Scala 代码,您可以按照自己的数据转换需求来自定义这些代码。在高级属性 部分中,选择作业书签列表中的启用 ,以免重复处理旧数据。

在下一页上,选择原始 Amazon S3 存储桶作为数据源,然后选择下一步 。在 数据目标页上,选择已处理的 Amazon S3 存储桶作为数据目标路径,然后选择 Parquet 作为格式。

在下一页上,您可以根据需要更改架构,例如更改列名称、删除您不太感兴趣的列名称,甚至可以更改数据类型。Amazon Web Services Glue 会相应地生成 ETL 代码。 最后,查看作业参数,然后选择保存作业并编辑脚本 ,如下所示。

在下一页上,您可以按照自己的数据转换需求进一步修改脚本。在这篇博文中,您可以保留脚本不变。在下一部分中,您将让此 ETL 作业自动执行。

随着数据提取的频率不断提高,您希望让 ETL 作业自动执行以转换数据。自动执行此流程有助于降低运营开销,并使数据工程团队能将精力集中在更重要的任务上。

Amazon Web Services Glue 在批量处理数据方面进行了优化。您可以将其配置为按照设定的时间间隔批量处理数据。您隔多久运行一次作业由最终用户需要多新的数据以及数据处理成本来决定。有关不同方法的信息,请参阅 Amazon Web Services Glue 开发人员指南中的在 Amazon Web Services Glue 中触发作业。 首先,您需要在 Lambda 函数和 CloudWatch Events 规则中进行一次性更改和配置 ETL 作业名称。在控制台上,打开已使用 Amazon Web Services CloudFormation 堆栈创建的 ETLJobLambda Lambda 函数。

选择出现的 Lambda 函数链接,然后查看代码。将 JobName 值更改为您在上一步中创建的 ETL 作业名称,然后选择保存 。

如以下屏幕截图所示,您将看到与 Amazon Web Services Lambda 函数关联的 Amazon Web Services CloudWatch Events 规则 CrawlerEventRule。在该 CloudWatch Events 规则收到成功状态时,它会触发 ETLJobLambda Lambda 函数。

现在,您已做好准备,在将文件上传到原始 S3 存储桶时将立即触发 Amazon Web Services Glue ETL 作业。在测试数据管道之前,请设置监视和提醒功能。

如果您希望在 Amazon Web Services Glue ETL 作业完成时收到电子邮件通知。刚才启动的 Amazon Web Services CloudFormation 模板已经部署了 CloudWatch Events 规则 OpsEventRule。此 CloudWatch Events 规则监视 Amazon Web Services Glue ETL 作业的状态,并在作业成功完成时使用 SNS 主题发送电子邮件通知。以下为具体的配置方法。

如下图所示,您在 CloudWatch 的 事件模式 部分中配置 Amazon Web Services Glue 作业名称。在 Amazon Web Services Glue 作业状态变为 已成功 时,事件会触发配置为目标的 SNS 主题。此 SNS 主题向您在部署部分中提供的用来接收通知的电子邮件地址发送电子邮件通知。

让我们在 CloudWatch Events 规则 OpsEventRule 中进行一次性的配置更改,以获取 Amazon Web Services Glue ETL 作业的状态。

1.打开 CloudWatch 控制台。

2.在导航窗格中,在 事件 下选择规则。选择包含 OpsEventRule 的规则名称,如以下所示。

  3.在右上角中依次选择 操作、编辑 。

4.将 Your-ETL-jobName 替换为您在上一步创建的 ETL 作业名称。

5.向下滚动并选择配置详细信息,然后选择更新规则。

至此,已通过自动方式创建了具有相应通知和提醒的完整数据管道,现在可以测试这套管道了。比如将新的每月数据上传到原始 Amazon S3 存储桶(例如,上传 2018 年 2 月的纽约绿色出租车 CSV 数据),会触发 GlueTriggerLambda Amazon Web Services Lambda 函数。您可以导航到 Amazon Web Services Glue 控制台,在其中可以查看正在运行的 Amazon Web Services Glue 爬网程序。

在爬网程序完成运行后,CloudWatch Events 规则 CrawlerEventRule 会触发 ETLJobLambda Lambda 函数。现在,您可以注意到 Amazon Web Services Glue ETL 作业正在运行。

在 ETL 作业成功完成后,CloudWatch Events 规则 OpsEventRule 会使用 Amazon SNS 主题向您发送电子邮件通知(如下所示),从而完成自动循环。 

请务必检查已处理的 Amazon S3 存储桶,在其中您将找到由自动化的 ETL 管道处理的已转换数据。既然已处理的数据在 Amazon S3 中准备就绪,接下来您需要在此 Amazon S3 位置运行 Amazon Web Services Glue 爬网程序。爬网程序会在 Amazon Web Services Glue 数据目录中创建一个具有相关架构的元数据表。

创建数据目录表之后,您可以使用 Amazon Athena 执行标准的 SQL 查询,以及使用 Amazon QuickSight 将数据可视化。要了解更多信息,请参阅博客文章 Harmonize, Query, and Visualize Data from Various Providers using Amazon Web Services Glue, Amazon Athena, and Amazon QuickSight。

拥有自动化的无服务器数据湖架构可以减轻从源到目的地对数据进行管理(包括发现、审计、监视和数据质量)的负担。利用覆盖多个组织的一个自动化数据管道,您能以比以前快得多的速度识别相关数据集和获取价值。缩短分析时间的优点是:企业可以在数据变得可用时对数据进行实时分析。通过使用 BI 工具,查询单个数据集返回结果的速度比查询多个数据库要快得多。

现在,企业分析师可以更快完成本职工作,而数据工程团队可以从重复性任务中抽身出来。您可以将数据加载到数据仓库(如 Amazon Redshift)中,或者通过 Amazon SageMaker 使数据可用于机器学习,从而进一步扩展其用途。

相关文章