为何 AWS Glue 爬网程序要运行很长时间?

上次更新日期:2021 年 8 月 31 日

AWS Glue 爬网程序已经运行了几个小时或更长时间,仍然无法识别我的数据存储中的架构。 

简短描述

以下是导致爬网程序长时间运行的一些常见原因:

  • 频繁添加新数据:在第一次运行爬网程序期间,爬网程序会读取每个文件的第一个兆字节来推断架构。在后续爬网程序运行期间,爬网程序会列出目标中的文件(包括第一次运行时爬取的文件),并读取新文件的第一个兆字节。爬网程序不会读取之前爬网程序运行期间已读取的文件。这意味着后续爬网程序运行速度通常更快。这是由于递增爬网功能(如果激活)。借助此选项,爬网程序仅在后续爬网运行中读取新数据。但是,当您在每次爬网程序运行期间向数据存储中添加大量文件或文件夹时,每次运行时间都会增加。
  • 网络爬取压缩文件:压缩文件需要更长时间来爬取。这是因为爬网程序必须下载该文件并将其解压,然后才能读取第一个兆字节或列出文件。
    注意:对于 Apache Parquet、Apache Avro 和 Apache Orc 文件,爬网程序不会爬取第一个兆字节。爬网程序反而会读取存储在每个文件中的元数据。

解决方法

在开始进行故障排除之前,请考虑下您是否需要运行爬网程序。除非您需要在 AWS Glue 数据目录中创建表,并在提取、转换和加载(ETL)任务或下游服务(如 Amazon Athena)中使用该表,否则不需要运行爬网程序。对于 ETL 任务,您可以使用 from_options 直接从数据存储中读取数据,并在 DynamicFrame 上使用转换。当您执行此操作时,无需在 ETL 管道中运行爬网程序。如果您确定爬网程序适用于您的使用案例,请使用以下一种或多种方法来减少爬网程序运行时间。

使用排除模式

排除模式会指示爬网程序跳过某些文件或路径。排除模式减少了爬网程序必须列出的文件数量,让爬网程序的运行速度更快。例如,使用排除模式可排除元文件和已爬取的文件。有关更多信息(包括排除模式示例),请参阅包含模式和排除模式

使用样本大小功能

AWS Glue 爬网程序支持样本大小功能。使用此功能,当网络爬取数据集中的样本文件时,您可以指定要从每个叶文件夹中网络爬取的文件数。启用此功能后,爬网程序会随机选择每个叶文件夹中的一些文件进行爬取,而不是爬取数据集中的所有文件。如果您之前了解数据格式,并且知道文件夹中的架构没有更改,那么请使用采样爬网程序。启用此功能可以显著缩短爬网程序运行时间。

运行多个爬网程序

与其在整个数据存储中运行一个爬网程序,不如考虑运行多个爬网程序。短时间运行多个爬网程序比长时间运行一个爬网程序更好。例如,假设您要按年对数据进行分区,并且每个分区都包含大量数据。如果在每个分区(每年)运行不同的爬网程序,则爬网程序的完成速度会更快。

合并较小的文件以创建较大的文件

爬取大量小文件要比爬取少量大文件花更多时间。这是因为爬网程序必须列出每个文件,并且必须读取每个新文件的第一个兆字节。