使用 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 事件模式下執行」。

注意

每個編目程式取用的訊息數目上限為 10 萬則訊息。

考量和限制

在您設定編目程式使用 Amazon S3 事件通知尋找任何變更時,適用下列考量和限制。

  • 已刪除分區的重要行為

    將 Amazon S3 事件編目程式與 Data Catalog 資料表搭配使用時:

    • 如果使用 DeletePartition API 呼叫刪除分區,您還必須刪除該分區下的所有 S3 物件,並在設定 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 政策新增至編目程式使用的角色。

    JSON
    { "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:us-east-1:111122223333:cfn-sqs-queue" } ] }