本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Glue 將 Spark 任務遷移至 6.0 AWS Glue 版
本主題說明 5.1 和 6.0 AWS Glue 版之間的變更,以允許您將 Spark 應用程式和 ETL 任務遷移至 AWS Glue 6.0。它還描述了 AWS Glue 6.0 中的功能以及使用它的優勢。
若要將此功能與 AWS Glue ETL 任務搭配使用,請在建立任務Glue version時6.0為 選擇 。
主題
新功能
本節說明 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 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 會視需要自動產生此虛擬環境。 -
串流增強功能 — 無狀態串流的即時模式,具有毫秒級延遲。如需詳細資訊,請參閱啟用串流任務的即時模式。
-
連接器升級 — 已更新 Amazon Redshift、MongoDB、Snowflake 和其他連接器。如需完整版本詳細資訊附錄 C:連接器升級,請參閱 。
已知問題和限制
請注意下列已知問題和限制:
-
根據預設,在 Spark 4.1 中會啟用 ANSI 模式。先前在溢位時傳回 NULL 的操作 (例如整數算術、轉換操作) 現在會擲回例外狀況。
spark.sql.ansi.enabled=false設定為還原先前的行為。 -
Spark 宣告管道 (SDP) 是一種新功能,對特定 SQL 建構的支援有限。如需目前限制,請參閱 Spark 宣告管道 文件。
-
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 遷移指南。
-
CreateSession API 驗證 — 對互動式工作階段的工作階段參數進行其他驗證。先前無提示接受的無效組態現在可能會傳回錯誤。
-
getResolvedOptions行為變更 — 預設會停用引數字首比對 (allow_abbrev=False)。使用完整引數名稱,或傳遞allow_abbrev=True至getResolvedOptions()以還原舊行為。
要遷移至 AWS Glue 6.0 的動作
對於現有的任務,請將舊版 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 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 API 操作的GlueVersion參數中選擇 。
為了協助遷移任務,您可以使用 的生成式 AI 升級Apache Spark,將 AWS Glue ETL 任務從舊版 (2 AWS Glue .0 及更新版本) 升級到最新版本。 AWS Glue
疑難排解
您可以使用 Spark 疑難排解代理程式來疑難排解 AWS Glue ETL 任務。
移轉檢查清單
檢閱此檢查清單以進行移轉:
-
【Scala】 針對 Scala 2.13.17 重新編譯自訂 JARs。使用
CollectionConverters取代JavaConversions。 -
【Python】 更新 Python 3.13 相容性的程式碼。移除已棄用模組的用量 (例如,、
impcgi、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
存在於 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
網站上的 Spark Core -
在 Apache Spark 網站上升級 PySpark
從舊版遷移 AWS Glue 至 AWS Glue 6.0
-
如需與 AWS Glue 5.0 到 AWS Glue 5.1 相關的遷移步驟,請參閱 從 AWS Glue 5.0 遷移至 AWS Glue 5.1。
-
如需與 AWS Glue 4.0 到 AWS Glue 5.0 相關的遷移步驟,請參閱 從 AWS Glue 4.0 遷移至 AWS Glue 5.0。
-
如需與 AWS Glue 3.0 至 AWS Glue 5.0 相關的遷移步驟,請參閱 從 AWS Glue 3.0 遷移至 AWS Glue 5.0。
-
如需與 AWS Glue 2.0 到 AWS Glue 5.0 相關的遷移步驟,請參閱 從 AWS Glue 2.0 遷移至 AWS Glue 5.0。
-
完成上述步驟後,請遵循 完成遷移至 AWS Glue 6從 AWS Glue 5.1 遷移至 AWS Glue 6.0.0。
Connector 和 JDBC 驅動程式遷移 for AWS Glue 6.0
如需已升級的 JDBC 和資料湖連接器版本,請參閱:
下列變更適用於 附錄 D:開放式資料表格式升級 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 讀取和寫入存取。
已知限制
下列限制適用於 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:值得注意的相依性升級
以下是相依性升級:
| 相依性 | 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 驅動程式升級
以下是 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:連接器升級
以下是連接器升級:
| 連接器 | 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:開放式資料表格式升級
以下是開放式資料表格式升級:
| 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 |