最佳实践 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最佳实践

使用开发时 AWS Glue,请考虑以下最佳实践。

先在本地开发

为了在构建 ETL 作业时节省成本和时间,请先在本地测试您的代码和业务逻辑。有关设置 Docker 容器以帮助您在 shel AWS Glue l 和集成开发环境 (IDE) 中测试 ETL 作业的说明,请参阅博客文章使用 Docker 容器在本地开发和测试 AWS Glue 作业

使用 AWS Glue 交互式会话

AWS Glue 交互式会话提供无服务器 Spark 后端,以及与笔记本和 IDE(例如 Int PyCharm elliJ 和 VS Code)集成的开源 Jupyter 内核。通过使用交互式会话,您可以使用 AWS Glue Spark 后端和您选择的 IDE 在真实数据集上测试代码。要开始使用,请按照AWS Glue 交互式会话入门中的步骤进行操作。

使用分区来查询您需要的确切内容

分区是指根据特定的列或键将大型数据集划分为较小的分区。对数据进行分区后, AWS Glue 可以对满足特定分区标准的数据子集执行选择性扫描,而不是扫描整个数据集。这样可以更快、更高效地处理查询,尤其是在处理大型数据集时。

根据将要针对数据运行的查询对数据进行分区。例如,如果大多数查询都针对特定列进行筛选,则对该列进行分区可以显著缩短查询时间。要了解有关分区数据的更多信息,请参阅 AWS Glue中的使用分区数据工作

优化内存管理

在编写 AWS Glue ETL 作业时,内存管理至关重要,因为它们在 Apache Spark 引擎上运行,该引擎针对内存中处理进行了优化。博客文章《在 AWS Glue中优化内存管理》详细介绍了以下内存管理技术:

  • 亚马逊 S3 列表的实施 AWS Glue

  • 分组

  • 不包括不相关的 Amazon S3 路径和存储类别

  • Spark 和 AWS Glue 读取分区

  • 批量插入

  • 连接优化

  • PySpark 用户定义的函数 (UDF)

  • 增量处理

使用高效的数据存储格式

在创作 ETL 作业时,建议以基于列的数据格式输出转换后的数据。列式数据格式,例如 Apache Parquet 和 ORC,通常用于大数据存储和分析。它们旨在最大限度地减少数据移动并最大限度地提高压缩率。这些格式还允许将数据拆分到多个读取器,从而在查询处理期间增加并行读取。

压缩数据还有助于减少存储的数据量,并提高读/写操作性能。 AWS Glue 本机支持多种压缩格式。有关高效数据存储和压缩的更多信息,请参阅构建高性能的数据管道

使用适当的扩展类型

了解何时进行水平扩展(更改员工人数)或垂直扩展(更改员工类型)非常重要, AWS Glue 因为这会影响 ETL 工作的成本和绩效。

通常,具有复杂转换的 ETL 作业的内存密集度更高,需要垂直扩展(例如,从 G.1X 工作线程类型迁移到 G.2X 工作线程类型)。对于包含大量数据的计算密集型 ETL 作业,我们建议进行横向扩展,因为 AWS Glue 该任务旨在跨多个节点并行处理这些数据。

密切监控 Amazon 中的 AWS Glue 任务指标 CloudWatch 可帮助您确定性能瓶颈是由内存不足还是计算不足引起的。有关 AWS Glue 工作线程类型和扩展的更多信息,请参阅扩展 Apache Spark 作业和对数据进行 AWS Glue分区的最佳实践