选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

优化输入文件大小的ETL摄取 AWS - AWS Prescriptive Guidance

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

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

优化输入文件大小的ETL摄取 AWS

由 Apoorva Patrikar 创作 () AWS

摘要

此模式向您展示如何通过在处理数据之前优化文件大小来优化 Glue 上大数据和 Apache Spark 工作负载的提取、转换和加载 (ETL) 过程的摄取步骤。AWS使用此模式可防止或解决小文件问题。也就是说,当大量小文件由于文件总大小而减慢数据处理速度时。例如,成百上千的每个文件只有几百千字节,可能会显著减慢 Glue 作业的数据处理速度AWS。这是因为 AWS Glue 必须在亚马逊简单存储服务 (Amazon S3) Simple Service 上执行内部列表功能,而YARN且(另一个资源谈判者)必须存储大量元数据。为了提高数据处理速度,您可以使用分组来使ETL任务能够将一组输入文件读取到单个内存分区中。该分区会自动将较小文件组合在一起。或者,您可以使用自定义代码将批处理逻辑添加至现有文件。

先决条件和限制

先决条件

架构

以下模式显示了 AWS Glue 任务如何处理不同格式的数据,然后将其存储在 S3 存储桶中以了解性能。

不同格式的数据由 Gl AWS ue 任务处理,然后存储在 S3 存储桶中。

图表显示了以下工作流:

  1. 注意

    AWSGlue 作业将CSVJSON、和 Parquet 格式的小文件转换为动态框架。:输入文件的大小对 AWS Glue 作业性能的影响最大。

  2. AWSGlue 任务在 S3 存储桶中执行内部列表功能。

工具

  • AWSGlu e 是一项完全托管的ETL服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。

  • Amazon Simple Storage Service(Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

操作说明

任务描述所需技能

指定群组大小。

如果您的文件数量超过 50,000 个,预设情况下将进行分组。但是,您也可以通过在 connectionOptions 参数中指定组大小来对少于 50,000 个文件使用分组。connectionOptions 参数使用 create_dynamic_frame.from_options 方法。

数据工程师

编写分组代码。

使用 create_dynamic_frame 方法创建动态框架。例如:

S3bucket_node1 = glueContext.create_dynamic_frame.from_options( format_options={"multiline": False}, connection_type="s3", format="json", connection_options={ "paths": ["s3://bucket/prefix/file.json"], "recurse": True, "groupFiles": 'inPartition', "groupSize": 1048576 }, transformation_ctx="S3bucket_node1", )
注意

groupFiles用于对 Amazon S3 分区组中的文件进行分组。使用 groupSize 设置要在内存中读取的组的目标大小。以字节为指定 groupSize (1048576 = 1 MB)。

数据工程师

将代码添加到工作流。

在 Glue 中将分组代码添加到您的工作流程AWS中。

数据工程师

使用分组来优化阅读ETL过程中的摄取

任务描述所需技能

指定群组大小。

如果您的文件数量超过 50,000 个,预设情况下将进行分组。但是,您也可以通过在 connectionOptions 参数中指定组大小来对少于 50,000 个文件使用分组。connectionOptions 参数使用 create_dynamic_frame.from_options 方法。

数据工程师

编写分组代码。

使用 create_dynamic_frame 方法创建动态框架。例如:

S3bucket_node1 = glueContext.create_dynamic_frame.from_options( format_options={"multiline": False}, connection_type="s3", format="json", connection_options={ "paths": ["s3://bucket/prefix/file.json"], "recurse": True, "groupFiles": 'inPartition', "groupSize": 1048576 }, transformation_ctx="S3bucket_node1", )
注意

groupFiles用于对 Amazon S3 分区组中的文件进行分组。使用 groupSize 设置要在内存中读取的组的目标大小。以字节为指定 groupSize (1048576 = 1 MB)。

数据工程师

将代码添加到工作流。

在 Glue 中将分组代码添加到您的工作流程AWS中。

数据工程师
任务描述所需技能

选择语言与处理平台。

选择针对您的用例量身定制的脚本语言与处理平台。

云架构师

编写代码。

编写自定义逻辑,将文件一起批处理。

云架构师

将代码添加到工作流。

在 Glue 中将代码添加到您的工作流程AWS中。这样,您就可在每次运行作业时应用自定义逻辑。

数据工程师

使用自定义逻辑优化ETL摄取

任务描述所需技能

选择语言与处理平台。

选择针对您的用例量身定制的脚本语言与处理平台。

云架构师

编写代码。

编写自定义逻辑,将文件一起批处理。

云架构师

将代码添加到工作流。

在 Glue 中将代码添加到您的工作流程AWS中。这样,您就可在每次运行作业时应用自定义逻辑。

数据工程师
任务描述所需技能

分析消费模式。

了解下游应用程序将如何使用您写入的数据。例如,如果他们每天查询数据,而您只按区域对数据进行分区,或者输出文件非常小,例如每个文件 2.5 KB,那么这并不是最佳的使用方式。

DBA

在写入之前对数据进行重新分区。

在处理过程中(基于处理逻辑)和处理后(基于消耗量),根据联接或查询进行重新分区。例如,根据字节大小进行重新分区(例如).repartition(100000),或基于列的重新分区,例如。.repartition("column_name")

数据工程师

转换后写入数据时重新分区

任务描述所需技能

分析消费模式。

了解下游应用程序将如何使用您写入的数据。例如,如果他们每天查询数据,而您只按区域对数据进行分区,或者输出文件非常小,例如每个文件 2.5 KB,那么这并不是最佳的使用方式。

DBA

在写入之前对数据进行重新分区。

在处理过程中(基于处理逻辑)和处理后(基于消耗量),根据联接或查询进行重新分区。例如,根据字节大小进行重新分区(例如).repartition(100000),或基于列的重新分区,例如。.repartition("column_name")

数据工程师

相关资源

其他信息

确定文件大小

没有直接的方法可确定文件大小。文件大小对处理性能的影响,取决于集群的配置。在核心 Hadoop,我们建议您使用 128 MB 或 256 MB 文件,以充分利用数据块。

对于 Gl AWS ue 上的大多数文本文件工作负载,我们建议 5-10 DPU 集群的文件大小在 100 MB 到 1 GB 之间。要找出输入文件的最佳大小,请监视 AWS Glue 作业的预处理部分,然后检查作业的CPU利用率和内存利用率。

其它注意事项

如果早期ETL阶段的性能存在瓶颈,请考虑在处理之前对数据文件进行分组或合并。如果您完全控制文件生成过程,则在将原始数据发送到源系统之前,将数据点聚合到源系统本身会更加高效AWS。

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。