本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
优化输入文件大小的ETL摄取 AWS
由 Apoorva Patrikar 创作 () AWS
摘要
此模式向您展示如何通过在处理数据之前优化文件大小来优化 Glue 上大数据和 Apache Spark 工作负载的提取、转换和加载 (ETL) 过程的摄取步骤。AWS使用此模式可防止或解决小文件问题。也就是说,当大量小文件由于文件总大小而减慢数据处理速度时。例如,成百上千的每个文件只有几百千字节,可能会显著减慢 Glue 作业的数据处理速度AWS。这是因为 AWS Glue 必须在亚马逊简单存储服务 (Amazon S3) Simple Service 上执行内部列表功能,而YARN且(另一个资源谈判者)必须存储大量元数据。为了提高数据处理速度,您可以使用分组来使ETL任务能够将一组输入文件读取到单个内存分区中。该分区会自动将较小文件组合在一起。或者,您可以使用自定义代码将批处理逻辑添加至现有文件。
先决条件和限制
先决条件
一个活跃的AWS账户
一项或多项AWS胶水作业
一个或多个大数据或 Apache Spark
工作负载 一个 S3 存储桶
架构
以下模式显示了 AWS Glue 任务如何处理不同格式的数据,然后将其存储在 S3 存储桶中以了解性能。

图表显示了以下工作流:
注意
AWSGlue 作业将CSVJSON、和 Parquet 格式的小文件转换为动态框架。:输入文件的大小对 AWS Glue 作业性能的影响最大。
AWSGlue 任务在 S3 存储桶中执行内部列表功能。
工具
AWSGlu e 是一项完全托管的ETL服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。
Amazon Simple Storage Service(Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
指定群组大小。 | 如果您的文件数量超过 50,000 个,预设情况下将进行分组。但是,您也可以通过在 | 数据工程师 |
编写分组代码。 | 使用
注意
| 数据工程师 |
将代码添加到工作流。 | 在 Glue 中将分组代码添加到您的工作流程AWS中。 | 数据工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
选择语言与处理平台。 | 选择针对您的用例量身定制的脚本语言与处理平台。 | 云架构师 |
编写代码。 | 编写自定义逻辑,将文件一起批处理。 | 云架构师 |
将代码添加到工作流。 | 在 Glue 中将代码添加到您的工作流程AWS中。这样,您就可在每次运行作业时应用自定义逻辑。 | 数据工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
分析消费模式。 | 了解下游应用程序将如何使用您写入的数据。例如,如果他们每天查询数据,而您只按区域对数据进行分区,或者输出文件非常小,例如每个文件 2.5 KB,那么这并不是最佳的使用方式。 | DBA |
在写入之前对数据进行重新分区。 | 在处理过程中(基于处理逻辑)和处理后(基于消耗量),根据联接或查询进行重新分区。例如,根据字节大小进行重新分区(例如) | 数据工程师 |
相关资源
其他信息
确定文件大小
没有直接的方法可确定文件大小。文件大小对处理性能的影响,取决于集群的配置。在核心 Hadoop,我们建议您使用 128 MB 或 256 MB 文件,以充分利用数据块。
对于 Gl AWS ue 上的大多数文本文件工作负载,我们建议 5-10 DPU 集群的文件大小在 100 MB 到 1 GB 之间。要找出输入文件的最佳大小,请监视 AWS Glue 作业的预处理部分,然后检查作业的CPU利用率和内存利用率。
其它注意事项
如果早期ETL阶段的性能存在瓶颈,请考虑在处理之前对数据文件进行分组或合并。如果您完全控制文件生成过程,则在将原始数据发送到源系统之前,将数据点聚合到源系统本身会更加高效AWS。