最佳化 ETL 上輸入檔案大小的擷取 AWS - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳化 ETL 上輸入檔案大小的擷取 AWS

由 Apoorva Patrikar 建立 (AWS)

環境:PoC 或試行

技術:分析;資料湖

工作負載:開放原始碼

AWS 服務:AWSGlue;Amazon S3

Summary

此模式說明如何在處理資料之前最佳化檔案大小,以最佳化 Glue 上大數據和 Apache Spark AWS 工作負載的擷取、轉換和載入 (ETL) 程序的擷取步驟。使用此模式來防止或解決小型檔案問題 。也就是說,當大量小型檔案由於檔案的彙總大小而減慢資料處理速度時。例如,各僅數百個 KB 的檔案可以大幅降低 Glue AWS 任務的資料處理速度。這是因為 AWS Glue 必須在 Amazon Simple Storage Service (Amazon S3) 上執行內部清單函數,且 YARN(還有另一個資源協商者) 必須存放大量中繼資料。若要改善資料處理速度,您可以使用分組讓ETL任務將一組輸入檔案讀取到單一記憶體內分割區。分割區會自動將較小的檔案分組在一起。或者,您可以使用自訂程式碼將批次邏輯新增至現有檔案。

先決條件和限制

先決條件

架構

下列模式顯示 Glue AWS 任務如何處理不同格式的資料,然後存放在 S3 儲存貯體中,以取得效能的可見性。

Glue AWS 任務會處理不同格式的資料,然後存放在 S3 儲存貯體中。

該圖顯示以下工作流程:

  1. Glue AWS 任務會將 CSV、 JSON和 Parquet 格式的小檔案轉換為動態影格。注意:輸入檔案的大小對 Glue AWS 任務的效能影響最大。

  2. Glue AWS 任務會在 S3 儲存貯體中執行內部清單函數。

工具

  • AWS Glue 是完全受管ETL的服務。它可協助您在資料存放區和資料串流之間可靠地分類、清除、擴充和移動資料。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

史詩

任務描述所需的技能

指定群組大小。

如果您有超過 50,000 個檔案,依預設會完成分組。不過,您也可以在 connectionOptions 參數中指定群組大小,以使用少於 50,000 個檔案的分組。connectionOptions 參數位於 create_dynamic_frame.from_options 方法中。

資料工程師

撰寫群組代碼。

使用 create_dynamic_frame方法建立動態影格。例如:

S3bucket_node1 = glueContext.create_dynamic_frame.from_options( format_options={"multiline": False}, connection_type="s3", format="json", connection_options={ "paths": ["s3://bucket/prefix/file.json"], "recurse": True, "groupFiles": 'inPartition', "groupSize": 1048576 }, transformation_ctx="S3bucket_node1", )

注意:使用 groupFiles將 Amazon S3 分割區群組中的檔案分組。使用 groupSize設定要在記憶體中讀取之群組的目標大小。groupSize 以位元組 (1048576 = 1 MB 為單位指定 )。

資料工程師

將程式碼新增至工作流程。

在 Glue AWS 中將群組代碼新增至您的任務工作流程

資料工程師
任務描述所需的技能

選擇語言和處理平台。

選擇針對您的使用案例量身打造的指令碼語言和處理平台。

雲端架構師

撰寫程式碼。

寫入自訂邏輯,將檔案批次處理在一起。

雲端架構師

將程式碼新增至工作流程。

在 Glue AWS 中將程式碼新增至您的任務工作流程。這可讓您的自訂邏輯在每次執行任務時套用。

資料工程師
任務描述所需的技能

分析消耗模式。

了解下游應用程式如何使用您寫入的資料。例如,如果他們每天查詢資料,而您只查詢每個區域的分割區資料,或擁有非常小的輸出檔案,例如每個檔案 2.5 KB,則這並非消耗的最佳選擇。

DBA

寫入前重新分割資料。

根據處理期間 (根據處理邏輯) 和處理後 (根據消耗) 的聯結或查詢重新分割。例如,根據位元組大小重新分割,例如 .repartition(100000),或根據資料欄重新分割,例如 .repartition("column_name")

資料工程師

相關資源

其他資訊

判斷檔案大小

判斷檔案大小是否太大或太小沒有簡單的方式。檔案大小對處理效能的影響取決於叢集的組態。在核心 Hadoop 中,建議您使用 128 MB 或 256 MB 的檔案,以充分利用區塊大小。

對於 Glue AWS 上的大多數文字檔案工作負載,我們建議 5-10 DPU叢集的檔案大小介於 100 MB 到 1 GB 之間。若要找出輸入檔案的最大大小,請監控 Glue AWS 任務的預先處理區段,然後檢查任務的CPU利用率和記憶體使用率。

其他考量事項

如果早期的效能ETL是瓶頸,請考慮在處理之前分組或合併資料檔案。如果您完全控制檔案產生程序,在原始資料傳送至 之前,在來源系統本身彙總資料點可能更有效率AWS。