

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

# 在 中使用 Iceberg AWS Glue
<a name="iceberg-glue"></a>

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

[AWS Glue 任務](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html)使用 [Apache Spark](https://spark.apache.org/)or Python 執行期來封裝定義轉換邏輯 AWS Glue 的指令碼。任務可以在批次和串流模式下執行。 

當您在 中建立 Iceberg 任務時 AWS Glue，根據 的版本 AWS Glue，您可以使用原生 Iceberg 整合或自訂 Iceberg 版本將 Iceberg 相依性連接到任務。

## 使用原生 Iceberg 整合
<a name="glue-native-integration"></a>

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 版本
<a name="glue-custom-integration"></a>

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

實作自訂 Iceberg 版本之前，請先檢查文件的 AWS Glue [AWS Glue 版本](https://docs.aws.amazon.com/glue/latest/dg/release-notes.html)區段，以確認與 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.jar](https://mvnrepository.com/artifact/org.apache.iceberg/iceberg-spark-runtime-3.5_2.12/1.9.1) 和 [iceberg-aws-bundle-1.9.1.jar。](https://mvnrepository.com/artifact/org.apache.iceberg/iceberg-aws-bundle/1.9.1)

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

1. 為您的任務設定 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`)。

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

   1. 如果您使用 AWS Glue 5.0，則必須將 `--user-jars-first` 參數設定為 `true`。

## 中 Iceberg 的 Spark 組態 AWS Glue
<a name="glue-spark-config"></a>

本節討論為 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 支援的目錄，請參閱本指南稍後[的一般最佳實務](best-practices.md)一節。

例如，如果您有名為 的目錄`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 任務的最佳實務
<a name="glue-best-practices"></a>

本節提供在 中調校 Spark 任務的一般準則 AWS Glue ，以最佳化讀取和寫入資料至 Iceberg 資料表。如需 Iceberg 特定的最佳實務，請參閱本指南稍後的[最佳實務](best-practices.md)一節。
+ **盡可能使用最新版本的 AWS Glue 和升級** – 新版本的 AWS Glue 提供效能改善、縮短啟動時間和新功能。它們也支援較新的 Spark 版本，這是最新 Iceberg 版本可能需要的版本。如需可用 AWS Glue 版本及其支援的 Spark 版本清單，請參閱 [AWS Glue 文件](https://docs.aws.amazon.com/glue/latest/dg/release-notes.html)。
+ **最佳化 AWS Glue 任務記憶體** – 遵循 AWS 部落格文章中的建議 [在 中最佳化記憶體管理 AWS Glue](https://aws.amazon.com/blogs/big-data/optimize-memory-management-in-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 [使用 的自動擴展](https://docs.aws.amazon.com/glue/latest/dg/auto-scaling.html)AWS Glue 。
+ **使用所需的 Iceberg 版本** – Iceberg 的 AWS Glue 原生整合最適合開始使用 Iceberg。不過，對於生產工作負載，我們建議您新增程式庫相依性 （如[本指南先前](#glue-custom-integration)所述），以完全控制 Iceberg 版本。此方法可協助您從任務中的最新 Iceberg AWS Glue 功能和效能改進中獲益。
+ **啟用 Spark UI 進行監控和偵錯** – 您也可以在 [中使用 Spark UI AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui.html) 來檢查 Iceberg 任務，方法是將 Spark 任務的不同階段視覺化為導向無環圖 (DAG)，並詳細監控任務。Spark UI 提供有效的方法來疑難排解和最佳化 Iceberg 任務。例如，您可以識別具有大型隨機播放或磁碟溢出的瓶頸階段，以識別調校機會。如需詳細資訊，請參閱 文件中的 AWS Glue [使用 Apache Spark Web UI 監控任務](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui.html)。