使用 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 事件模式下运行”。
注意
每次抓取最多可消费 100,000 条消息。
限制
当您将爬网程序配置为使用 Amazon S3 事件通知来查找任何更改时,以下限制适用。
无论是 Amazon S3 还是 Data Catalog 目标,爬网程序仅支持单个目标。
SQS不支持私VPC有模式。
不支持 Amazon S3 采样。
爬网程序目标应该是 Amazon S3 目标的文件夹,或者是一个或多个目标文件夹 AWS Glue 数据目录目标的数据目录表。
不支持“所有”路径通配符: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" } ] }