本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 事件通知设置账户
完成以下设置任务。请注意,括号中的值引用了脚本中的可配置设置。
-
您需要为自己的 Amazon S3 存储桶设置事件通知。
有关更多信息,请参阅 Amazon S3 事件通知。
-
要使用基于 Amazon S3 事件的爬网程序,您应该在 Amazon S3 存储桶上启用事件通知,然后使用从与 S3 目标相同的前缀中筛选的事件,并存储在 SQS 中。您可以按照演练:为存储桶配置通知中的步骤通过控制台设置 SQS 和事件通知。
-
将以下 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" } ] }