

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

# AWS Glue 將 Spark 任務遷移至 6.0 AWS Glue 版
<a name="migrating-version-60"></a>

本主題說明 5.1 和 6.0 AWS Glue 版之間的變更，以允許您將 Spark 應用程式和 ETL 任務遷移至 AWS Glue 6.0。它還描述了 AWS Glue 6.0 中的功能以及使用它的優勢。

若要將此功能與 AWS Glue ETL 任務搭配使用，請在建立任務`Glue version`時**6.0**為 選擇 。

**Topics**
+ [新功能](#migrating-version-60-features)
+ [要遷移至 AWS Glue 6.0 的動作](#migrating-version-60-actions)
+ [移轉檢查清單](#migrating-version-60-checklist)
+ [從 AWS Glue 5.1 遷移至 AWS Glue 6.0](#migrating-version-60-from-51)
+ [從舊版遷移 AWS Glue 至 AWS Glue 6.0](#migrating-older-versions-to-60)
+ [Connector 和 JDBC 驅動程式遷移 for AWS Glue 6.0](#migrating-version-60-connector-driver-migration)
+ [已知限制](#migrating-version-60-known-limitations)
+ [附錄 A：值得注意的相依性升級](#migrating-version-60-appendix-dependencies)
+ [附錄 B：JDBC 驅動程式升級](#migrating-version-60-appendix-jdbc-driver)
+ [附錄 C：連接器升級](#migrating-version-60-appendix-connector)
+ [附錄 D：開放式資料表格式升級](#migrating-version-60-appendix-open-table-formats)

## 新功能
<a name="migrating-version-60-features"></a>

本節說明 6.0 AWS Glue 版的新功能和優點。
+ Apache Spark 從 3.5.6 in AWS Glue 5.1 升級到 4.1.1 in AWS Glue 6.0。
+ Scala 從 2.12.18 升級到 2.13.17。
+ Python 從 3.11 升級到 3.13。
+ 開放資料表格式 (OTF) 已更新為 Hudi 1.1.1、Iceberg 1.11.0 和 Delta Lake 4.2.0。
+ **Iceberg 格式第 3 版** — 擴展資料類型和現有中繼資料結構，以新增新功能，包括：
  + 具有變體碎片的 VARIANT 資料類型，可簡化半結構化資料管理並加快讀取速度。
  + 奈秒精度時間戳記。
  + 地理空間資料類型 （幾何和地理）。
+ **Spark 宣告管道 (SDP)** — 使用 SQL 或 DataFrame API 定義end-to-end資料管道的新宣告架構，支援串流資料表和具體化視觀表。如需詳細資訊，請參閱[Spark 宣告管道](spark-declarative-pipelines.md)。
+ **Spark Connect for Interactive Sessions** — 透過 Spark Connect 通訊協定啟用 AWS Glue 互動式工作階段的精簡型用戶端連線，以支援遠端開發工作流程。
+ **Arrow 原生 Python UDFs/UDTFs**使用 Apache Arrow 原生單欄式格式改善 Python 使用者定義函數的效能。
+ **客戶受管或服務產生的 Python 虛擬環境** (`--python-virtual-env`) — 您可以建置並提供自己的 Python venv，以在執行時間 AWS Glue 連接至 Spark 驅動程式和執行器，提供對相依性管理的完全控制。當現有任務遷移至 AWS Glue 6.0 時， AWS Glue 會視需要自動產生此虛擬環境。
+ **串流增強**功能 — 無狀態串流的即時模式，具有毫秒級延遲。如需詳細資訊，請參閱[啟用串流任務的即時模式](streaming-chapter.md#glue-streaming-real-time-mode)。
+ **連接器升級** — 已更新 Amazon Redshift、MongoDB、Snowflake 和其他連接器。如需完整版本詳細資訊[附錄 C：連接器升級](#migrating-version-60-appendix-connector)，請參閱 。

**已知問題和限制**  
請注意下列已知問題和限制：
+ 根據**預設，在 Spark 4.1 中會啟用 ANSI 模式**。先前在溢位時傳回 NULL 的操作 （例如整數算術、轉換操作） 現在會擲回例外狀況。`spark.sql.ansi.enabled=false` 設定為還原先前的行為。
+ **Spark 宣告管道 (SDP)** 是一種新功能，對特定 SQL 建構的支援有限。如需目前限制，請參閱 [Spark 宣告管道](spark-declarative-pipelines.md) 文件。
+ Athena SQL 無法讀取在 AWS Glue 6.0 中建立的 **Iceberg v3 資料表** （錯誤：`Cannot read unsupported version 3`)。使用 Iceberg v2 與 Athena 進行跨引擎相容性。
+ **Python 3.13** 會移除數個已取代的模組，並變更某些標準程式庫函數的行為。檢閱 Python 3.13 遷移指南中的相容性。
+ **AWS 適用於 Java 的 SDK 2.x 與 —6.0 的相容性`--user-jars-first`**包括適用於 Java 的 AWS SDK 2.x 2.44.6 版。 AWS Glue 如果您使用`--user-jars-first`任務參數搭配自訂 JAR，該 JAR 會綁定舊版的適用於 Java 的 AWS SDK 2.x，您的任務可能會失敗，並出現 `java.lang.NoSuchFieldError`或類似錯誤。當您自訂 JAR 中綁定的 SDK 缺少執行時間相依的 AWS Glue 類別、欄位或方法時，就會發生這些失敗。為了避免此問題，請確定您隨 提供的任何自訂 JAR `--user-jars-first`都使用適用於 Java 的 AWS SDK 2.x 2.44.6 版或更新版本。

**突破性變更**  
請注意下列變更：
+ **EMRFS 已移除。**S3A 是 AWS Glue 6.0 中唯一的 S3 檔案系統。`com.amazon.ws.emr.hadoop.fs.EmrFileSystem` 類別不再可用。使用`s3://`路徑的任務會自動使用 S3A。如果您先前已設定 EMRFS 特定組態 （例如 `fs.s3.consistent.*`)，請將其移除。
+ **AWS 適用於 Java 的 SDK v1 已移除。**只有 AWS SDK v2 (2.44.6) 可用。匯入`com.amazonaws.services.*`套件的任務必須遷移至 `software.amazon.awssdk.services.*`。
+ **Scala 從 2.12 升級到 2.13。**針對 Scala 2.12 編譯的自訂 JARs 無法運作。針對 Scala 2.13.17 重新編譯。金鑰變更：`JavaConversions`已移除 （使用 `CollectionConverters`)、已`MutableList`移除 （使用 `ListBuffer`)、平行集合需要個別匯入。
+ **Spark 4.1 API 變更：**
  + `SQLContext` 已移除 - `SparkSession`直接使用。
  + 預設啟用 ANSI 模式 — 隱含類型轉換和溢位的行為不同。
  + 已移除數個已棄用 APIs。請參閱 Apache [Spark 網站上的 Spark 4.1 遷移指南。](https://spark.apache.org/docs/4.1.1/migration-guide.html)
+ **CreateSession API 驗證** — 對互動式工作階段的工作階段參數進行其他驗證。先前無提示接受的無效組態現在可能會傳回錯誤。
+ **`getResolvedOptions` 行為變更** — 預設會停用引數字首比對 (`allow_abbrev=False`)。使用完整引數名稱，或傳遞`allow_abbrev=True`至 `getResolvedOptions()` 以還原舊行為。

## 要遷移至 AWS Glue 6.0 的動作
<a name="migrating-version-60-actions"></a>

對於現有的任務，請將舊版 `Glue version` 變更為任務組態中的 `Glue 6.0`。
+ 在 AWS Glue Studio `Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3`中，選擇 `Glue version`。
+ 在 API **6.0**中，選擇 [UpdateJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-UpdateJob) API 操作中的 `GlueVersion` 參數。

對於新任務，當您建立任務時請選擇 `Glue 6.0`。
+ 在主控台中，在 `Glue version` 中選擇 `Spark 4.1.1, Python 3 (Glue Version 6.0) or Spark 4.1.1, Scala 2 (Glue Version 6.0)`。
+ 在 AWS Glue Studio `Glue 6.0 - Supports Spark 4.1.1, Scala 2, Python 3`中，選擇 `Glue version`。
+ 在 API **6.0**中，在 [CreateJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-CreateJob) API 操作的 `GlueVersion` 參數中選擇 。

為了協助遷移任務，您可以使用 [的生成式 AI 升級Apache Spark](https://docs.aws.amazon.com/glue/latest/dg/upgrade-analysis.html)，將 AWS Glue ETL 任務從舊版 (2 AWS Glue .0 及更新版本） 升級到最新版本。 AWS Glue 

**疑難排解**  
您可以使用 [Spark 疑難排解代理](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/spark-troubleshoot.html)程式來疑難排解 AWS Glue ETL 任務。

## 移轉檢查清單
<a name="migrating-version-60-checklist"></a>

檢閱此檢查清單以進行移轉：
+ 【Scala】 針對 Scala 2.13.17 重新編譯自訂 JARs。使用 `CollectionConverters` 取代 `JavaConversions`。
+ 【Python】 更新 Python 3.13 相容性的程式碼。移除已棄用模組的用量 （例如，、`imp``cgi`、`cgitb`)。
+ 【Python】 將 boto3 參考從 1.40 更新至 1.42。
+ 【Spark SQL】 檢閱 ANSI 模式影響的查詢。`spark.sql.ansi.enabled=false` 視需要新增 。
+ 【SDK】 將任何 AWS SDK v1 匯入 (`com.amazonaws.*`) 取代為 SDK v2 (`software.amazon.awssdk.*`)。
+ 【S3】 移除 EMRFS 特定的組態。S3A 現在是預設且只有 S3 連接器。
+ 【相依性】 更新`--extra-jars`為針對 Scala 2.13 和 Spark 4.1 編譯的版本。

## 從 AWS Glue 5.1 遷移至 AWS Glue 6.0
<a name="migrating-version-60-from-51"></a>

存在於 AWS Glue 5.1 中的所有現有任務參數和主要功能都將存在於 AWS Glue 6.0 中。移轉時請注意下列變更：
+ **S3 檔案系統：**EMRFS 不再可用。S3A 是唯一的 S3 連接器。如果您先前已設定 `spark.hadoop.fs.s3a.endpoint.region`，請繼續使用它。如果未設定，請確定您的 VPC 端點或網路組態允許 S3A 解析正確的區域。
+ **Scala 二進位相容性：** AWS Glue 6.0 使用 Scala 2.13。使用 Scala 2.12 `--extra-jars` 編譯的任何 都會使用 `NoSuchMethodError`或 來失敗。 `ClassNotFoundException`重新編譯所有自訂 Scala/Java JARs。
+ **Spark SQL 行為變更：**
  + 根據預設，ANSI 模式為 ON。整數溢出、無效的轉換和陣列索引out-of-bounds回例外狀況，而不是傳回 NULL。
  + `spark.sql.legacy.timeParserPolicy` 預設已變更。日期/時間剖析的行為可能不同。
  + SQL 中的隱含string-to-numeric轉換可能會在 ANSI 模式下失敗。
+ **Python 版本：**Python 3.13 是執行時間。`--additional-python-modules` 此功能會繼續運作，但已棄用。請考慮遷移至 `--python-virtual-env`以完全控制相依性。
+ **AWS SDK：**只有 SDK v2 可用。如果您的指令碼使用 boto3 (Python)，則不需要變更 - boto3 會繼續運作。對於直接使用 AWS SDK 的 Scala/Java 任務，請遷移至 v2 APIs。

請參閱 Spark 移轉文件：
+ [遷移指南：Apache Spark](https://spark.apache.org/docs/4.1.1/core-migration-guide.html) 網站上的 Spark Core
+ [遷移指南：Apache Spark 網站上的 SQL、資料集和 DataFrame](https://spark.apache.org/docs/4.1.1/sql-migration-guide.html) 
+ [遷移指南：Apache Spark 網站上的結構化串流](https://spark.apache.org/docs/4.1.1/ss-migration-guide.html) 
+ 在 Apache Spark 網站上[升級 PySpark](https://spark.apache.org/docs/4.1.1/api/python/migration_guide/pyspark_upgrade.html) 

## 從舊版遷移 AWS Glue 至 AWS Glue 6.0
<a name="migrating-older-versions-to-60"></a>
+ 如需與 AWS Glue 5.0 到 AWS Glue 5.1 相關的遷移步驟，請參閱 [從 AWS Glue 5.0 遷移至 AWS Glue 5.1](migrating-version-51.md#migrating-version-51-from-50)。
+ 如需與 AWS Glue 4.0 到 AWS Glue 5.0 相關的遷移步驟，請參閱 [從 AWS Glue 4.0 遷移至 AWS Glue 5.0](migrating-version-50.md#migrating-version-50-from-40)。
+ 如需與 AWS Glue 3.0 至 AWS Glue 5.0 相關的遷移步驟，請參閱 [從 AWS Glue 3.0 遷移至 AWS Glue 5.0](migrating-version-50.md#migrating-version-50-from-30)。
+ 如需與 AWS Glue 2.0 到 AWS Glue 5.0 相關的遷移步驟，請參閱 [從 AWS Glue 2.0 遷移至 AWS Glue 5.0](migrating-version-50.md#migrating-version-50-from-20)。
+ 完成上述步驟後，請遵循 完成遷移至 AWS Glue 6[從 AWS Glue 5.1 遷移至 AWS Glue 6.0](#migrating-version-60-from-51).0。

## Connector 和 JDBC 驅動程式遷移 for AWS Glue 6.0
<a name="migrating-version-60-connector-driver-migration"></a>

如需已升級的 JDBC 和資料湖連接器版本，請參閱：
+ [附錄 B：JDBC 驅動程式升級](#migrating-version-60-appendix-jdbc-driver)
+ [附錄 C：連接器升級](#migrating-version-60-appendix-connector)
+ [附錄 D：開放式資料表格式升級](#migrating-version-60-appendix-open-table-formats)

下列變更適用於 [附錄 D：開放式資料表格式升級](#migrating-version-60-appendix-open-table-formats) for AWS Glue 6.0 中識別的 OTF 版本升級。

**Apache Iceberg**  
請注意下列變更：
+ Iceberg 升級到 1.11.0，並完全支援 Apache Iceberg 第 3 版規格。
+ 具有變體碎片的 VARIANT 資料類型，用於最佳化半結構化資料查詢。
+ 奈秒精度時間戳記。
+ 地理空間資料類型 （幾何和地理）。

自 AWS Glue AWS Glue 5.1 起，ETL 已支援下列 Iceberg 功能：刪除向量 (merge-on-read)，以及透過`first-row-id`中繼資料追蹤資料列譜。

**Apache Hudi**  
請注意下列變更：
+ Hudi 升級至 1.1.1。
+ 持續支援 AWS Lake Formation 已註冊資料表上的 FTA 讀取和寫入存取。

**Delta Lake**  
請注意下列變更：
+ Delta Lake 升級至 4.2.0。
+ 持續支援 AWS Lake Formation 已註冊資料表上的 FTA 讀取和寫入存取。

## 已知限制
<a name="migrating-version-60-known-limitations"></a>

下列限制適用於 AWS Glue 6.0：
+ 不支援 Iceberg 原生資料表加密金鑰。
+ 不支援 Iceberg 多引數轉換。
+ 只有 Spark DataFrames 支援新的 Iceberg v3 資料類型。這些功能不適用於 DynamicFrames。
+  AWS Glue Studio 中的視覺化 ETL 不支援新的 Iceberg v3 資料類型。如果您想要將這些新功能與視覺化 ETL 搭配使用，建議您將 ETL 任務遷移至 Amazon SageMaker Unified Studio。
+ VARIANT 資料欄不支援精細存取控制 (FGAC)。
+ Athena SQL `'format-version'='3'`無法讀取使用 建立的 Iceberg 資料表 （錯誤：`Cannot read unsupported version 3`)。使用 Iceberg v2 與 Athena 進行跨引擎相容性。

## 附錄 A：值得注意的相依性升級
<a name="migrating-version-60-appendix-dependencies"></a>

以下是相依性升級：


| 相依性 | in AWS Glue 6.0 版本 | in AWS Glue 5.1 版本 | in AWS Glue 5.0 版本 | in AWS Glue 4.0 版本 | 
| --- | --- | --- | --- | --- | 
| Java | 17 | 17 | 17 | 8 | 
| Spark | 4.1.1 | 3.5.6 | 3.5.4 | 3.3.0-amzn-1 | 
| Hadoop | 3.4.2 | 3.4.1 | 3.4.1 | 3.3.3-amzn-0 | 
| Scala | 2.13.17 | 2.12.18 | 2.12.18 | 2.12 | 
| Jackson | 2.20.0 | 2.15.2 | 2.15.2 | 2.12 | 
| Hive | 2.3.10-amzn-1 | 2.3.9-amzn-4 | 2.3.9-amzn-4 | 2.3.9-amzn-2 | 
| Arrow | 18.3.0 | 12.0.1 | 12.0.1 | 7.0.0 | 
| AWS Glue Data Catalog 用戶端 | 4.11.0 | 4.9.0 | 4.5.0 | 3.7.0 | 
| AWS 適用於 Java 的 SDK | 2.44.6 （僅限 v2) | 2.35.5 | 2.29.52 | 1.12 | 
| Python | 3.13 | 3.11 | 3.11 | 3.10 | 
| Boto3 | 1.42.84 | 1.40.61 | 1.34.131 | 1.26 | 
| Json4s | 3.7.0-M11 | 3.7.0-M11 | 3.7.0-M11 | 3.7.0-M11 | 
| EMR DynamoDB 連接器 | 6.1.0 | 5.7.0 | 5.6.0 | 4.16.0 | 
| Netty | 4.2.7 | N/A | N/A | N/A | 
| Parquet | 1.16.0 | N/A | N/A | N/A | 
| NumPy | 2.4.4 | N/A | N/A | N/A | 
| Pandas | 2.3.3 | N/A | N/A | N/A | 

## 附錄 B：JDBC 驅動程式升級
<a name="migrating-version-60-appendix-jdbc-driver"></a>

以下是 JDBC 驅動程式升級：


| 驅動程式 | JDBC 驅動程式 in AWS Glue 6.0 版 | JDBC 驅動程式 AWS Glue 5.1 版 | JDBC 驅動程式 AWS Glue 5.0 版 | 
| --- | --- | --- | --- | 
| MySQL | 8.0.33 | 8.0.33 | 8.0.33 | 
| Microsoft SQL Server | 10.2.0 | 10.2.0 | 10.2.0 | 
| Oracle 資料庫 | 23.4.0.24.05 | 23.3.0.23.09 | 23.3.0.23.09 | 
| PostgreSQL | 42.7.3 | 42.7.3 | 42.7.3 | 
| Amazon Redshift | redshift-jdbc42-2.2.7 | redshift-jdbc42-2.1.0.29 | redshift-jdbc42-2.1.0.29 | 
| MariaDB | 3.5.7 | N/A | N/A | 

## 附錄 C：連接器升級
<a name="migrating-version-60-appendix-connector"></a>

以下是連接器升級：


| 連接器 | in AWS Glue 6.0 版本 | in AWS Glue 5.1 版本 | in AWS Glue 5.0 版本 | 
| --- | --- | --- | --- | 
| Spark Redshift | 6.7.0 | 6.4.2 | 6.4.0 | 
| Spark SQL Kinesis | 2.1.0 | N/A | N/A | 
| MongoDB | 11.0.1 | 10.3.0 | 10.3.0 | 
| Snowflake | 3.17.0 | 3.1.1 | 3.0.0 | 
| OpenSearch | 2.0.0 | 1.2.0 | 1.2.0 | 
| EMR DynamoDB 連接器 | 6.1.0 | 5.7.0 | 5.6.0 | 

## 附錄 D：開放式資料表格式升級
<a name="migrating-version-60-appendix-open-table-formats"></a>

以下是開放式資料表格式升級：


| OTF | in AWS Glue 6.0 版本 | in AWS Glue 5.1 版本 | in AWS Glue 5.0 版本 | in AWS Glue 4.0 版本 | 
| --- | --- | --- | --- | --- | 
| Hudi | 1.1.1 | 1.0.2 | 0.15.0 | 0.12.1 | 
| Delta Lake | 4.2.0 | 3.3.2 | 3.3.0 | 2.1.0 | 
| Iceberg | 1.11.0 | 1.10.0 | 1.7.1 | 1.0.0 | 