將 AWS Glue for Spark 任務遷移到 AWS Glue 4.0 版 - AWS Glue

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

將 AWS Glue for Spark 任務遷移到 AWS Glue 4.0 版

本主題說明 AWS Glue 版本 0.9、1.0、2.0 和 3.0 之間的變更,以允許您將 Spark 應用程式和 ETL 任務遷移到 AWS Glue 4.0。其中也介紹 AWS Glue 4.0 中的功能及其使用優點。

若要將此功能搭配 AWS Glue ETL 任務,請在建立您的任務時針對 Glue version 選擇 4.0

支援的新功能

本節說明 AWS Glue 4.0 版的新功能和優點。

  • 其基於 Apache Spark 3.3.0,但包括 AWS Glue 和 Amazon EMR 中的最佳化,例如調整式查詢執行、向量化讀取器,以及最佳化的隨機和分割區合併。

  • 升級 JDBC 驅動程式的所有 AWS Glue 原生來源,包括 MySQL、Microsoft SQL Server、Oracle、PostgreSQL、MongoDB 和由 Spark 3.3.0 帶來的升級 Spark 程式庫和相依性。

  • 以新的 Amazon Redshift 連接器和 JDBC 驅動程式進行更新。

  • 透過升級的 EMR File System (EMRFS) 最佳化 Amazon S3 存取,並預設啟用 Amazon S3 最佳化的輸出提交器。

  • 最佳化 Data Catalog 存取與分割區索引、下推述詞、分割區清單,以及升級的 Hive 中繼存放區用戶端。

  • 與 Lake Formation 整合,以控管的目錄資料表具有儲存格層級篩選和資料湖交易。

  • 減少啟動延遲,可改善整體任務完成時間和互動性。

  • Spark 任務以 1 秒的增量計費,最短計費持續時間變為原來的十分之一,即從最短 10 分鐘變為最短 1 分鐘。

  • 原生支援開放式資料湖架構,包括 Apache Hudi、Delta Lake 和 Apache Iceberg。

  • 原生支援以 Amazon S3 為基礎的雲端隨機排序儲存外掛程式 (Apache Spark 外掛程式),以使用 Amazon S3 進行隨機排序和彈性儲存容量。

從 Spark 3.1.1 到 Spark 3.3.0 的主要增強功能

請注意下列增強功能:

  • 資料列層級執行時間篩選 (SPARK-32268)。

  • ANSI 增強功能 (SPARK-38860)。

  • 錯誤訊息改善項目 (SPARK-38781)。

  • 支援 Parquet 向量化讀取器的複雜類型 (SPARK-34863)。

  • 隱藏 Spark SQL 的檔案中繼資料支援 (SPARK-37273)。

  • 提供 Python/pandas UDF 的分析工具 (SPARK-37443)。

  • 導入 Trigger.AvailableNow,以執行分成多批次執行的 Trigger.Once 等串流查詢 (SPARK-36533)。

  • 更全面的 Datasource V2 下推功能 (SPARK-38788)。

  • 從 log4j 1 遷移到 log4j 2 (SPARK-37814)。

其他顯著的變更

請注意下列變更:

  • 重大變更

    • 在文件和 Python/文件中加入 Python 3.6 支援的參考 (SPARK-36977)。

    • 將內建 pickle 更換成 cloudpickle,以移除命名的 tuple hack (SPARK-32079)。

    • 將 pandas 從最小版本增加到 1.0.5 (SPARK-37465)。

遷移到 AWS Glue 4.0 的動作

對於現有的任務,請將舊版 Glue version 變更為任務組態中的 Glue 4.0

  • 在 AWS Glue Studio 中,選擇 Glue version 中的 Glue 4.0 - Supports Spark 3.3, Scala 2, Python 3

  • 在 API 中,選擇 UpdateJob API 操作 GlueVersion 參數中的 4.0

對於新任務,當您建立任務時請選擇 Glue 4.0

  • 在主控台中,在 Glue version 中選擇 Spark 3.3, Python 3 (Glue Version 4.0) or Spark 3.3, Scala 2 (Glue Version 3.0)

  • 在 AWS Glue Studio 中,選擇 Glue version 中的 Glue 4.0 - Supports Spark 3.3, Scala 2, Python 3

  • 在 API 中,選擇 CreateJob API 操作 GlueVersion 參數中的 4.0

若要查看來自 AWS Glue 2.0 或更早版本的 AWS Glue 4.0 Spark 事件日誌,請使用 AWS CloudFormation 或 Docker 啟動 AWS Glue 4.0 的升級 Spark 歷史伺服器

遷移檢查清單

檢閱此檢查清單以進行遷移:

注意

如需與 AWS Glue 3.0 相關的檢查清單項目,請參閱遷移檢查清單

  • 您任務的外部 Python 程式庫是否依賴於 Python 2.7/3.6?

    • 將相依程式庫從 Python 2.7/3.6 更新為 Python 3.10,因為 Spark 3.3.0 完全刪除了 Python 2.7 和 3.6 的支援。

從 AWS Glue 3.0 遷移到 AWS Glue 4.0

遷移時請注意下列變更:

  • AWS Glue 3.0 中所有現有任務參數和主要功能都將存在於 AWS Glue 4.0。

  • AWS Glue 3.0 使用 Amazon EMR 最佳化 Spark 3.1.1,而 AWS Glue 4.0 使用 Amazon EMR 最佳化 Spark 3.3.0。

    單獨的數個 Spark 變更可能需要修改指令碼,以確保沒有引用被刪除的功能。

  • AWS Glue 4.0 也有 EMRFS 和 Hadoop 的更新。如需特定版本,請參閱附錄 A:值得注意的相依性升級

  • 在 ETL 任務中提供的 AWS SDK 現在已從 1.11 升級到 1.12。

  • 所有 Python 任務都將使用 3.10 版。Python 3.7 之前用於 AWS Glue 3.0。

    因此,升級了 AWS Glue 提供的部分立即可用的 pymodules。

  • Log4j 已升級到 Log4j2。

    • 如需 Log4j2 遷移路徑的資訊,請參閱 Log4j 文件

    • 您必須以適當的 log4j2 屬性將任何自訂 log4j 屬性檔案重新命名為 log4j2.properties 檔案。

  • 如需遷移某些連接器,請參閱AWS Glue 4.0 的連接器和 JDBC 驅動程式遷移

  • AWS Encryption SDK 已從 1.x 升級到 2.x。這會影響使用 AWS Glue 安全組態的 AWS Glue 任務,以及相依在執行階段中所提供 AWS Encryption SDK 相依性的任務。請參閱 AWS Glue 任務遷移的說明。

    由於 AWS Glue 2.0/3.0 已包含 AWS Encryption SDK 橋接器版本,因此您可安全地將 AWS Glue 2.0/3.0 任務升級到 AWS Glue 4.0 任務。

請參閱 Spark 遷移文件:

從 AWS Glue 2.0 遷移到 AWS Glue 4.0

遷移時請注意下列變更:

注意

如需與 AWS Glue 3.0 相關的步驟,請參閱從 AWS Glue 3.0 遷移到 AWS Glue 4.0

  • AWS Glue 2.0 中所有現有任務參數和主要功能都將存在於 AWS Glue 4.0。

  • 自 AWS Glue 3.0 起,預設啟用將 Parquet 資料寫入 Amazon S3 的 EMRFS S3 最佳化遞交者。不過,您仍然可以透過將 --enable-s3-parquet-optimized-committer 設定為 false 來停用它。

  • AWS Glue 2.0 使用開源 Spark 2.4 而 AWS Glue 4.0 使用 Amazon EMR 最佳化 Spark 3.3.0。

    • 單獨的數個 Spark 變更可能需要修改指令碼,以確保沒有引用被刪除的功能。

    • 例如,Spark 3.3.0 不啟用 Scala 無類型的 UDF,但 Spark 2.4 確實允許它們。

  • 在 ETL 任務中提供的 AWS SDK 現在已從 1.11 升級到 1.12。

  • AWS Glue 4.0 還提供 EMRFS 的更新、更新的 JDBC 驅動程式,以及 AWS Glue 提供的對 Spark 本身的其他最佳化。

  • Scala 從 2.11 更新到 2.12,而 Scala 2.12 不回溯相容 Scala 2.11。

  • Python 3.10 也是用於 Python 指令碼的預設版本,因為 AWS Glue 2.0 只利用 Python 3.7 和 2.7。

    • Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗,並出現 IllegalArgumentException。

    • 自 AWS Glue 2.0 起,提供安裝其他 Python 模組的新機制。

  • 數個相依性更新,在 附錄 A:值得注意的相依性升級 中反白顯示。

  • 在現有 AWS Glue 2.0 任務中提供的任何額外 JAR 檔案可能會帶來衝突的相依性,因為 4.0 中的幾個相依性已從 2.0 升級。您可以避免 AWS Glue 4.0 與 --user-jars-first AWS Glue 任務參數的 classpath 衝突。

  • AWS Glue 4.0 使用 Spark 3.3。從 Spark 3.1 開始,從 Parquet 檔案載入時間戳記以及將時間戳記儲存至此類檔案的行為發生了變化。有關更多詳細資訊,請參閱從 Spark SQL 3.0 升級到 3.1

    建議在讀取/寫入包含時間戳記資料行的 parquet 資料時設定以下參數。針對 AWS Glue 動態框架和 Spark 資料框架,設定這些參數可以解決從 Spark 2 升級到 Spark 3 期間發生的行事曆不相容問題。使用「更正」選項原樣讀取 datetime 值;使用「舊式」選項可以在讀取過程中針對行事曆差異重新設定 datetime 值的基準。

    - Key: --conf - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]
  • 如需遷移某些連接器,請參閱AWS Glue 4.0 的連接器和 JDBC 驅動程式遷移

  • AWS Encryption SDK 已從 1.x 升級到 2.x。這會影響使用 AWS Glue 安全組態的 AWS Glue 任務,以及相依在執行階段中所提供 AWS Encryption SDK 相依性的任務。請參閱 AWS Glue 任務遷移的說明:

    • 由於 AWS Glue 2.0 已包含 AWS Encryption SDK 橋接器版本,因此您可安全地將 AWS Glue 2.0 任務升級到 AWS Glue 4.0 任務。

請參閱 Spark 遷移文件:

從 AWS Glue 1.0 遷移到 AWS Glue 4.0

遷移時請注意下列變更:

  • AWS Glue 1.0 使用開源 Spark 2.4 而 AWS Glue 4.0 使用 Amazon EMR 最佳化 Spark 3.3.0。

    • 單獨的數個 Spark 變更可能需要修改指令碼,以確保沒有引用被刪除的功能。

    • 例如,Spark 3.3.0 不啟用 Scala 無類型的 UDF,但 Spark 2.4 確實允許它們。

  • AWS Glue 4.0 中的所有任務都將以顯著改善的啟動時間執行。Spark 任務將以 1 秒的增量計費,最短計費持續時間變為原來的十分之一,因為啟動延遲將從最大 10 分鐘到最大 1 分鐘。

  • 記錄行為在 AWS Glue 4.0 中有顯著變更,而 Spark 3.3.0 有最低的 Log4j2 要求。

  • 數個相依性更新,在附錄中反白顯示。

  • Scala 也從 2.11 更新到 2.12,而 Scala 2.12 不回溯相容 Scala 2.11。

  • Python 3.10 也是用於 Python 指令碼的預設版本,因為 AWS Glue 0.9 只利用 Python 2。

    Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗,並出現 IllegalArgumentException。

  • 自 AWS Glue 2.0 起,提供透過 pip 安裝其他 Python 模組的新機制。如需詳細資訊,請參閱使用 pip 在 AWS Glue 2.0+ 中安裝其他 Python 模組

  • AWS Glue 4.0 不在 Apache YARN 上執行,因此不會套用 YARN 設定。

  • AWS Glue 4.0 沒有 Hadoop 分散式檔案系統 (HDFS)。

  • 在現有 AWS Glue 1.0 任務中提供的任何額外 JAR 檔案可能會帶來衝突的相依性,因為 4.0 中的幾個相依性已從 1.0 升級。我們已預設啟用包含 --user-jars-first AWS Glue 任務參數的 AWS Glue 4.0,以避免此問題。

  • AWS Glue 4.0 支援 Auto Scaling。因此,啟用 Auto Scaling 後,將提供 ExecutorAllocationManager 指標。

  • 在 AWS Glue 4.0 版任務,您可以指定工作者和工作者類型的數目,但不指定 maxCapacity

  • AWS Glue 4.0 尚未支援機器學習轉換。

  • 如需遷移某些連接器,請參閱AWS Glue 4.0 的連接器和 JDBC 驅動程式遷移

  • AWS Encryption SDK 已從 1.x 升級到 2.x。這會影響使用 AWS Glue 安全組態的 AWS Glue 任務,以及相依在執行階段中所提供 AWS Encryption SDK 相依性的任務。請參閱 AWS Glue 任務遷移的這些說明。

    • 您無法直接將 AWS Glue 0.9/1.0 任務遷移到 AWS Glue 4.0 任務。這是因為當直接升級到 2.x 版或更高版本並立即啟用所有新功能時,AWS Encryption SDK 將無法解密透過 AWS Encryption SDK 之前版本加密的密文。

    • 若要安全地升級,建議您先遷移到包含 AWS Encryption SDK 橋接器版本的 AWS Glue 2.0/3.0 任務。執行任務一次,即可使用 AWS Encryption SDK 橋接器版本。

    • 完成後,您可以安全地將 AWS Glue 2.0/3.0 任務遷移到 AWS Glue 4.0。

請參閱 Spark 遷移文件:

從 AWS Glue 0.9 遷移到 AWS Glue 4.0

遷移時請注意下列變更:

  • AWS Glue 0.9 使用開源 Spark 2.2.1 而 AWS Glue 4.0 使用 Amazon EMR 最佳化 Spark 3.3.0。

    • 單獨的數個 Spark 變更可能需要修改指令碼,以確保沒有引用被刪除的功能。

    • 例如,Spark 3.3.0 不啟用 Scala 無類型的 UDF,但 Spark 2.2 確實允許它們。

  • AWS Glue 4.0 中的所有任務都將以顯著改善的啟動時間執行。Spark 任務將以 1 秒的增量計費,最短計費持續時間變為原來的十分之一,因為啟動延遲將從最大 10 分鐘變為最大 1 分鐘。

  • 自 AWS Glue 4.0 起,記錄行為已有顯著的變更,Spark 3.3.0 具有 Log4j2 的最低要求,如下所述 (https://spark.apache.org/docs/latest/core-migration-guide.html#upgrading-from-core-32-to-33)。

  • 數個相依性更新,在附錄中反白顯示。

  • Scala 也從 2.11 更新到 2.12,而 Scala 2.12 不回溯相容 Scala 2.11。

  • Python 3.10 也是用於 Python 指令碼的預設版本,因為 AWS Glue 0.9 只利用 Python 2。

    • Python 2.7 不支援 Spark 3.3.0。在任務組態中請求 Python 2 的任何任務都將失敗,並出現 IllegalArgumentException。

    • 提供透過 pip 安裝其他 Python 模組的新機制。

  • AWS Glue 4.0 不在 Apache YARN 上執行,因此不會套用 YARN 設定。

  • AWS Glue 4.0 沒有 Hadoop 分散式檔案系統 (HDFS)。

  • 在現有 AWS Glue 0.9 任務中提供的任何額外 JAR 檔案可能會帶來衝突的相依性,因為 3.0 中的幾個相依性已從 0.9 升級。您可以避免 AWS Glue 3.0 與 --user-jars-first AWS Glue 任務參數的 classpath 衝突。

  • AWS Glue 4.0 支援 Auto Scaling。因此,啟用 Auto Scaling 後,將提供 ExecutorAllocationManager 指標。

  • 在 AWS Glue 4.0 版任務,您可以指定工作者和工作者類型的數目,但不指定 maxCapacity

  • AWS Glue 4.0 尚未支援機器學習轉換。

  • 如需遷移某些連接器,請參閱AWS Glue 4.0 的連接器和 JDBC 驅動程式遷移

  • AWS Encryption SDK 已從 1.x 升級到 2.x。這會影響使用 AWS Glue 安全組態的 AWS Glue 任務,以及相依在執行階段中所提供 AWS Encryption SDK 相依性的任務。請參閱 AWS Glue 任務遷移的這些說明。

    • 您無法直接將 AWS Glue 0.9/1.0 任務遷移到 AWS Glue 4.0 任務。這是因為當直接升級到 2.x 版或更高版本並立即啟用所有新功能時,AWS Encryption SDK 將無法解密透過 AWS Encryption SDK 之前版本加密的密文。

    • 若要安全地升級,建議您先遷移到包含 AWS Encryption SDK 橋接器版本的 AWS Glue 2.0/3.0 任務。執行任務一次,即可使用 AWS Encryption SDK 橋接器版本。

    • 完成後,您可以安全地將 AWS Glue 2.0/3.0 任務遷移到 AWS Glue 4.0。

請參閱 Spark 遷移文件:

AWS Glue 4.0 的連接器和 JDBC 驅動程式遷移

如需已升級的 JDBC 和資料湖連接器版本,請參閱:

Hudi

  • Spark SQL 支援改善項目:

    • 透過 Call Procedure 命令新增升級、降級、引導、清理和維修的支援。Create/Drop/Show/Refresh Index 語法可在 Spark SQL 中使用。

    • 透過 Spark DataSource 的使用消除對照於 Spark SQL 的效能落差。過去的 Datasource 寫入曾比 SQL 快。

    • 所有內建金鑰產生器都會實作更多效能 Spark 特定 API 操作。

    • 用 RDD 轉換取代大量 insert 操作中的 UDF 轉換,以削減使用 SerDe 的成本。

    • 使用 Hudi 的 Spark SQL 需要由 tblproperites 或 SQL 陳述式中的選項指定 primaryKey。更新和刪除操作也需要 preCombineField

  • 自 0.10.0 版起,在 0.10.0 版之前建立且無 primaryKey 的任何 Hudi 資料表都需要使用 primaryKey 欄位重新建立。

PostgreSQL

  • 已處理數個安全漏洞 (CVE)。

  • 原生支援 Java 8。

  • 如果任務正使用陣列的陣列,此情境可以作為多維陣列處理,但不包括位元組陣列。

MongoDB

  • 目前 MongoDB 連接器支援 Spark 3.1 版或更高版本和 MongoDB 4.0 版或更高版本。

  • 由於連接器升級,部分屬性名稱也已變更。例如,URI 屬性名稱已變更為 connection.uri。如需目前選項的詳細資訊,請參閱 MongoDB Spark Connector 部落格

  • 使用由 Amazon DocumentDB 託管的 MongoDB 4.0 時有些功能差異。如需詳細資訊,請參閱以下主題:

  • "Partitioner" 選項僅限於 ShardedPartitionerPaginateIntoPartitionsPartitionerSinglePartitionPartitioner。該選項不能將預設 SamplePartitionerPaginateBySizePartitioner 用於 Amazon DocumentDB,因為階段運算子不支援 MongoDB API。如需詳細資訊,請參閱 Supported MongoDB APIs, Operations, and Data Types (支援的 MongoDB API、操作和資料類型)。

Delta Lake

  • Delta Lake 現在支援 SQL 中的時間移動操作,可輕鬆查詢舊資料。透過此更新,現在可在 Spark SQL 中以及透過 DataFrame API 提供時間移動操作。已在 SQL 中新增對目前 TIMESTAMP 版本的支援。

  • Spark 3.3 導入 Trigger.AvailableNow,以執行串流查詢 (等同於用於批次查詢的 Trigger.Once)。使用 Delta 資料表作為串流來源時,也提供此支援。

  • 支援傳回資料表中資料欄清單的 SHOW COLUMNS。

  • 支援 Scala 和 Python DeltaTable API 中的 DESCRIBE DETAIL。其會使用 DeltaTable API 或 Spark SQL 擷取 Delta 資料表的相關詳細資訊。

  • 支援從 SQL DeleteMergeUpdate 命令傳回操作指標。這些 SQL 命令之前會傳回空的 DataFrame,現在則會傳回包含已執行操作之實用指標的 DataFrame。

  • 最佳化效能改善項目:

    • 設定組態選項 spark.databricks.delta.optimize.repartition.enabled=true 以在 Optimize 命令中使用 repartition(1) 而非 coalesce(1),以便在精簡小型檔案時實現更高的效能。

    • 使用佇列式方法平行化精簡任務,從而改善效能

  • 其他顯著的變更:

Apache Iceberg

  • 已新增掃描規劃和 Spark 查詢的數項效能改善項目

  • 已新增常見的 REST 目錄用戶端,該用戶端使用以變更為基礎的遞交來解決服務端的遞交衝突。

  • 已支援 SQL 時間移動查詢的 AS OF 語法。

  • 已新增 MERGE 和 UPDATE 查詢的「讀取時合併」支援。

  • 已新增使用 Z-order 重新寫入分割區的支援。

  • 已新增 Puffin 的規格和實作,此為大型統計資料和索引 blob 的格式,就像是 Theta 示意圖或 bloom 篩選條件。

  • 已新增遞增取用資料的新介面 (附加和變更日誌掃描)。

  • 已新增對於大量操作和遠端讀取 FileIO 介面的支援。

  • 已新增更多中繼資料表,以在中繼資料樹狀結構中顯示刪除檔案。

  • 已變更放置資料表行為。在 Iceberg 0.13.1 中,執行 DROP TABLE 會從目錄移除資料表,並刪除資料表內容。在 Iceberg 1.0.0 中,DROP TABLE 僅從目錄刪除資料表。若要刪除資料表內容,請使用 DROP TABLE PURGE

  • 已在 Iceberg 1.0.0 中啟用 Parquet 向量化讀取。如要停用向量化讀取,請將 read.parquet.vectorization.enabled 設定為 false

Oracle

僅為次要變更。

MySQL

僅為次要變更。

Amazon Redshift

AWS Glue 4.0 採用配備新 JDBC 驅動程式的全新 Amazon Redshift 連接器。如需有關增強功能以及如何從之前 AWS Glue 版本遷移的資訊,請參閱Redshift 連線

附錄 A:值得注意的相依性升級

以下是相依性升級:

相依性 AWS Glue 4.0 中的版本 AWS Glue 3.0 中的版本 AWS Glue 2.0 中的版本 AWS Glue 1.0 中的版本
Spark 3.3.0-amzn-1 3.1.1-amzn-0 2.4.3 2.4.3
Hadoop 3.3.3-amzn-0 3.2.1-amzn-3 2.8.5-amzn-5 2.8.5-amzn-1
Scala 2.12 2.12 2.11 2.11
Jackson 2.13.3 2.10.x 2.7.x 2.7.x
Hive 2.3.9-amzn-2 2.3.7-amzn-4 1.2 1.2
EMRFS 2.54.0 2.46.0 2.38.0 2.30.0
Json4s 3.7.0-M11 3.6.6 3.5.x 3.5.x
Arrow 7.0.0 2.0.0 0.10.0 0.10.0
AWS Glue Data Catalog 用戶端 3.7.0 3.0.0 1.10.0 N/A
Python 3.10 3.7 2.7 和 3.6 2.7 和 3.6
Boto 1.26 1.18 1.12 N/A

附錄 B:JDBC 驅動程式升級

以下是 JDBC 驅動程式升級:

驅動程式 過去 AWS Glue 版本的 JDBC 驅動程式版本 AWS Glue 3.0 的 JDBC 驅動程式版本 AWS Glue 4.0 中的 JDBC 驅動程式版本
MySQL 5.1 8.0.23 8.0.23
Microsoft SQL Server 6.1.0 7.0.0 9.4.0
Oracle 資料庫 11.2 21.1 21.7
PostgreSQL 42.1.0 42.2.18 42.3.6
MongoDB 2.0.0 4.0.0 4.7.2
Amazon Redshift

redshift-jdbc41-1.2.12.1017

redshift-jdbc41-1.2.12.1017

redshift-jdbc42-2.1.0.16

附錄 C:連接器升級

以下是連接器升級:

驅動程式 AWS Glue 3.0 中的連接器版本 AWS Glue 4.0 中的連接器版本
MongoDB 3.0.0 10.0.4
Hudi 0.10.1 0.12.1
Delta Lake 1.0.0 2.1.0
Iceberg 0.13.1 1.0.0
DynamoDB 1.11 1.12