在 中使用 Apache Iceberg AWS Glue - AWS 方案指引

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

在 中使用 Apache Iceberg AWS Glue

AWS Glue 是一種無伺服器資料整合服務,可讓您更輕鬆地探索、準備、移動和整合來自多個來源的資料,以進行分析、機器學習 (ML) 和應用程式開發。的核心功能之一 AWS Glue 是能夠以簡單且符合成本效益的方式執行擷取、轉換和載入 (ETL) 操作。這有助於分類資料、清理資料、充實資料,並在各種資料存放區和資料串流之間可靠地移動資料。 

AWS Glue 任務使用 Apache Sparkor Python 執行期來封裝定義轉換邏輯 AWS Glue 的指令碼。任務可以在批次和串流模式下執行。 

當您在 中建立 Iceberg 任務時 AWS Glue,視 的版本而定 AWS Glue,您可以使用原生 Iceberg 整合或自訂 Iceberg 版本,將 Iceberg 相依性連接至任務。

使用原生 Iceberg 整合

AWS Glue 3.0、4.0 和 5.0 版原生支援 AWS Glue 適用於 Spark 的 Apache Iceberg、Apache Hudi 和 Linux Foundation Delta Lake 等交易資料湖格式。此整合功能可簡化在 中開始使用這些架構所需的組態步驟 AWS Glue。

若要為您的 AWS Glue 任務啟用 Iceberg 支援,請設定任務:選擇 AWS Glue 任務的任務詳細資訊索引標籤、捲動至進階屬性的任務參數,並將金鑰設定為 --datalake-formats ,並將值設定為 iceberg

如果您使用筆記本撰寫任務,則可以使用%%configure魔術設定第一個筆記本儲存格中的 參數,如下所示:

%%configure { "--conf" : <job-specific Spark configuration discussed later>, "--datalake-formats" : "iceberg" }

--datalake-formats 中的 AWS Glue iceberg組態會根據您的版本對應至特定 Iceberg AWS Glue 版本:

AWS Glue 版本 預設 Iceberg 版本

5.0

1.7.1

4.0

1.0.0

3.0

0.13.1

使用自訂 Iceberg 版本

在某些情況下,您可能想要控制任務的 Iceberg 版本,並依照自己的步調進行升級。例如,升級至更新版本可以解鎖對新功能和效能增強功能的存取。若要搭配 使用特定的 Iceberg 版本 AWS Glue,您可以提供自己的 JAR 檔案。

實作自訂 Iceberg 版本之前,請先檢查文件的 AWS Glue AWS Glue 版本區段,以確認與您的 AWS Glue 環境的相容性。例如, AWS Glue 5.0 需要與 Spark 3.5.4 相容。

例如,若要執行使用 Iceberg 1.9.1 版 AWS Glue 的任務,請遵循下列步驟:

  1. 取得所需的 JAR 檔案並將其上傳至 Amazon S3:

    1. 從 Apache Maven 儲存庫下載 iceberg-spark-runtime-3.5_2.12-1.9.1.jariceberg-aws-bundle-1.9.1.jar。

    2. 將這些檔案上傳至您指定的 S3 儲存貯體位置 (例如 s3://your-bucket-name/jars/)。

  2. 為您的任務設定 AWS Glue 任務參數,如下所示:

    1. --extra-jars 參數中指定兩個 JAR 檔案的完整 S3 路徑,以逗號分隔 (例如,s3://your-bucket-name/jars/iceberg-spark-runtime-3.5_2.12-1.9.1.jar,s3://your-bucket-name/jars/iceberg-aws-bundle-1.9.1.jar)。

    2. 請勿包括 iceberg 作為 --datalake-formats 參數的值。

    3. 如果您使用 AWS Glue 5.0,則必須將 --user-jars-first 參數設定為 true

中 Iceberg 的 Spark 組態 AWS Glue

本節討論為 Iceberg 資料集撰寫 AWS Glue ETL 任務所需的 Spark 組態。您可以使用 --conf Spark 金鑰搭配逗號分隔的所有 Spark 組態金鑰和值清單來設定這些組態。您可以在筆記本或 AWS Glue Studio 主控台的任務參數區段中使用 %%configure 魔術。

%glue_version 5.0 %%configure { "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions...", "--datalake-formats" : "iceberg" }

使用下列屬性設定 Spark 工作階段:

  • <catalog_name> 是 Iceberg Spark 工作階段目錄名稱的名稱。將其取代為您選擇的名稱,並記得在所有與此目錄相關聯的組態中變更參考。在程式碼中,您可以使用完整資料表名稱來參考 Iceberg 資料表,包括 Spark 工作階段目錄名稱,如下所示:

    <catalog_name>.<database_name>.<table_name>

    或者,您可以將預設目錄變更為您透過將 設定為目錄名稱定義的 Iceberg spark.sql.defaultCatalog 目錄。您可以使用此第二個方法參考沒有目錄字首的資料表,這可以簡化您的查詢。

  • <catalog_name>.<warehouse> 會指向您要存放資料和中繼資料的 Amazon S3 路徑。

  • 若要將目錄設為 AWS Glue Data Catalog,請將 spark.sql.catalog.<catalog_name>.type設定為 glue。需要此金鑰才能指向任何自訂目錄實作的實作類別。如需 Iceberg 支援的目錄,請參閱本指南稍後的一般最佳實務一節。

例如,如果您有名為 的目錄glue_iceberg,您可以使用多個--conf金鑰來設定任務,如下所示:

%%configure { "--datalake-formats" : "iceberg", "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.glue_iceberg=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.glue_iceberg.warehouse=s3://<your-warehouse-dir>/ --conf spark.sql.catalog.glue_iceberg.type=glue" }

或者,您可以使用程式碼將上述組態新增至 Spark 指令碼,如下所示:

spark = SparkSession.builder\ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")\ .config("spark.sql.catalog.glue_iceberg", "org.apache.iceberg.spark.SparkCatalog")\ .config("spark.sql.catalog.glue_iceberg.warehouse","s3://<your-warehouse-dir>/")\ .config("spark.sql.catalog.glue_iceberg.type", "glue") \ .getOrCreate()

AWS Glue 任務的最佳實務

本節提供在 中調校 Spark 任務的一般準則 AWS Glue ,以最佳化讀取和寫入資料至 Iceberg 資料表。如需 Iceberg 特定的最佳實務,請參閱本指南稍後的最佳實務一節。

  • 盡可能使用最新版本的 AWS Glue 和升級 – 新版本的 AWS Glue 提供效能改善、縮短啟動時間和新功能。它們也支援較新的 Spark 版本,這是最新 Iceberg 版本可能需要的版本。如需可用 AWS Glue 版本及其支援的 Spark 版本清單,請參閱 AWS Glue 文件

  • 最佳化 AWS Glue 任務記憶體 – 遵循 AWS 部落格文章中的建議 在 中最佳化記憶體管理 AWS Glue

  • Use AWS Glue Auto Scaling – 當您啟用 Auto Scaling 時, 會根據工作負載自動動態 AWS Glue 調整 AWS Glue 工作者數量。這有助於降低尖峰負載期間 AWS Glue 的任務成本,因為 AWS Glue 當工作負載很小且工作者閒置時, 會縮減工作者數量。若要使用 AWS Glue Auto Scaling,您可以指定任務 AWS Glue 可擴展的工作者數量上限。如需詳細資訊,請參閱 文件中的 AWS Glue 使用 的自動擴展AWS Glue 。

  • 使用所需的 Iceberg 版本 – Iceberg 的 AWS Glue 原生整合最適合開始使用 Iceberg。不過,對於生產工作負載,我們建議您新增程式庫相依性 (如本指南先前所述),以完全控制 Iceberg 版本。此方法可協助您從任務中的最新 Iceberg AWS Glue 功能和效能改進中獲益。

  • 啟用 Spark UI 進行監控和偵錯 – 您也可以在 中使用 Spark UI AWS Glue 來檢查 Iceberg 任務,方法是將 Spark 任務的不同階段視覺化為導向無環圖 (DAG),並詳細監控任務。Spark UI 提供有效的方法來疑難排解和最佳化 Iceberg 任務。例如,您可以識別具有大型隨機播放或磁碟溢出的瓶頸階段,以識別調校機會。如需詳細資訊,請參閱 文件中的 AWS Glue 使用 Apache Spark Web UI 監控任務