使用 Amazon S3 事件通知加速网络爬取 - AWS Glue

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

使用 Amazon S3 事件通知加速网络爬取

您可以将爬网程序配置为使用 Amazon S3 事件来查找任何更改,而不是列出 Amazon S3 或 Data Catalog 目标中的对象。此功能使用 Amazon S3 事件,通过列出触发事件的子文件夹中的所有文件,而不是列出完整的 Amazon S3 或 Data Catalog 目标,来识别两次网络爬取之间的更改,从而缩短了重新爬网时间。

第一次网络爬取会列出目标中的所有 Amazon S3 对象。第一次成功爬取之后,您可以选择手动重新爬取或按设定计划重新爬取。爬网程序只会列出这些事件中的对象,而不会列出所有对象。

当目标为 Data Catalog 表时,爬网程序会利用更改(例如,表中的额外分区)更新 Data Catalog 中的现有表。

迁移到基于 Amazon S3 事件的爬网程序的优点包括:

  • 不需要列出目标中的所有对象,而是在添加或删除对象的位置列出特定文件夹,从而重新爬网更快。

  • 在添加或删除对象的位置列出特定文件夹,从而降低总体网络爬取成本。

Amazon S3 事件网络爬取基于爬网程序调度,从 SQS 队列中使用 Amazon S3 事件来运行。如果队列中没有事件,则无需支付费用。Amazon S3 事件可以配置为直接进入 SQS 队列,或者在多个用户需要相同事件的情况下,也可以配置为 SNS 和 SQS 的组合。有关更多信息,请参阅 为 Amazon S3 事件通知设置账户

在事件模式下创建和配置爬网程序之后,第一次网络爬取将在列表模式下通过执行 Amazon S3 或 Data Catalog 目标的完整列表来运行。第一次成功网络爬取后将使用 Amazon S3 事件,以下日志可确认网络爬取的运行:“网络爬取正在使用 Amazon S3 事件来运行。”

创建 Amazon S3 事件网络爬取并更新可能影响网络爬取的爬网程序属性后,网络爬取将在列表模式下运行,并添加以下日志:“网络爬取未在 S3 事件模式下运行”。

注意

每次爬取使用的最大消息数为 10000。

限制

当您将爬网程序配置为使用 Amazon S3 事件通知来查找任何更改时,以下限制适用。

  • 无论是 Amazon S3 还是 Data Catalog 目标,爬网程序仅支持单个目标。

  • 不支持私有 VPC 上的 SQS。

  • 不支持 Amazon S3 采样。

  • 爬网程序目标应为 Amazon S3 目标的文件夹,或者 Data Catalog 目标的一个或多个 AWS Glue Data Catalog 表。

  • 不支持“所有”路径通配符:s3://%

  • 对于 Data Catalog 目标,所有目录表都应指向 Amazon S3 事件模式的同一 Amazon S3 存储桶。

  • 对于 Data Catalog 目标,目录表不应指向 Delta Lake 格式的 Amazon S3 位置(包含 _symlink 文件夹或检查目录表的 InputFormat)。

为 Amazon S3 事件通知设置账户

完成以下设置任务。请注意,括号中的值引用了脚本中的可配置设置。

  1. 您需要为自己的 Amazon S3 存储桶设置事件通知。

    有关更多信息,请参阅 Amazon S3 事件通知

  2. 要使用基于 Amazon S3 事件的爬网程序,您应该在 Amazon S3 存储桶上启用事件通知,然后使用从与 S3 目标相同的前缀中筛选的事件,并存储在 SQS 中。您可以按照演练:为存储桶配置通知中的步骤通过控制台设置 SQS 和事件通知。

  3. 将以下 SQS 策略添加到爬网程序使用的角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:GetQueueUrl", "sqs:ListDeadLetterSourceQueues", "sqs:ReceiveMessage", "sqs:GetQueueAttributes", "sqs:ListQueueTags", "sqs:SetQueueAttributes", "sqs:PurgeQueue" ], "Resource": "arn:aws:sqs:{region}:{accountID}:cfn-sqs-queue" } ] }