最佳实践 - AWS Prescriptive Guidance

最佳实践

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

先在本地开发

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

使用 AWS Glue 交互式会话

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

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

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

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

优化内存管理

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

  • AWS Glue 的 Amazon S3 列表实施

  • 分组

  • 不包括不相关的 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 CloudWatch 中的 AWS Glue 作业指标可帮助您确定性能瓶颈是由内存不足还是计算不足引起的。有关 AWS Glue 工作线程类型和扩展的更多信息,请参阅扩展 Apache Spark 作业和 AWS Glue 对数据进行分区的最佳实践