AWS Glue 將 Spark 任務遷移至 4.0 AWS Glue 版 - AWS Glue

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

AWS Glue 將 Spark 任務遷移至 4.0 AWS Glue 版

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

若要將 AWS Glue ETL此功能與任務搭配使用,請在建立任務Glue version4.0為 選擇 。

支援的新功能

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

  • 它以 Apache Spark 3.3.0 為基礎,但包含 AWS Glue、 和 Amazon 的最佳化EMR,例如適應性查詢執行、向量化讀取器,以及最佳化隨機傳輸和分割區合併。

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

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

  • 根據預設,使用升級EMR的檔案系統 (EMRFS) 最佳化 Amazon S3 存取,並啟用 Amazon S3-optimized輸出遞交器。

  • 最佳化 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 的分析器 UDFs(SPARK-37443)。

  • 介紹 Trigger. AvailableNow 用於執行串流查詢,例如 Trigger.Origger。一次為多個批次 (SPARK-36533)。

  • 更全面的資料來源 V2 下推功能 (SPARK-38788)。

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

其他顯著的變更

請注意下列變更:

遷移到 AWS Glue 4.0 的動作

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

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

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

對於新任務,當您建立任務時請選擇 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 4.0 - Supports Spark 3.3, Scala 2, Python 3中,選擇 Glue version

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

若要檢視來自 AWS Glue 2.0 或更早版本的 AWS Glue 4.0 Spark 事件日誌,請使用 AWS CloudFormation 或 Docker 啟動升級的 Spark 歷史記錄伺服器 for AWS Glue 4.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 中使用。

    因此, 帶來 out-of-the-box的某些 pymodule AWS Glue 會升級。

  • Log4j 已升級到 Log4j2。

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

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

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

  • AWS 加密SDK會從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務,以及取決於執行時間提供的 AWS 加密SDK相依性的任務都會受到影響。請參閱 AWS Glue 任務遷移的說明。

    您可以安全地將 AWS Glue 2.0/3.0 任務升級至 AWS Glue 4.0 任務,因為 AWS Glue 2.0/3.0 已包含 AWS 加密SDK橋接器版本。

請參閱 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 版中。

  • 用於將 Parquet 資料寫入 Amazon S3 的 EMRFS S3-optimized遞交者預設為啟用 AWS Glue 3.0 版。不過,您仍然可以透過將 --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 未輸入 UDFs,但 Spark 2.4 會允許它們。

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

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

  • 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 升級。您可以避免 classpath 在 AWS Glue 4.0 中與--user-jars-first AWS Glue 任務參數發生衝突。

  • AWS Glue 4.0 使用 Spark 3.3。從 Spark 3.1 loading/saving of timestamps from/to 開始,parquet 檔案的行為發生變更。如需詳細資訊,請參閱從 Spark SQL 3.0 升級至 3.1

    建議在讀取/寫入包含時間戳記資料行的 parquet 資料時設定以下參數。設定這些參數可以解決 AWS Glue 動態影格和 Spark 資料影格在 Spark 2 升級至 Spark 3 期間發生的行事曆不相容問題。使用 CORRECTED選項以原樣讀取日期時間值;使用 LEGACY選項,根據讀取期間的行事曆差異重新建立日期時間值的基礎。

    - 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 加密SDK會從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務,以及取決於執行時間提供的 AWS 加密SDK相依性的任務都會受到影響。請參閱以下 AWS Glue 任務遷移說明:

    • 您可以安全地將 AWS Glue 2.0 任務升級至 AWS Glue 4.0 任務,因為 AWS Glue 2.0 已包含 AWS 加密SDK橋接器版本。

請參閱 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 未輸入 UDFs,但 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 支援自動擴展。因此,啟用自動擴展時, ExecutorAllocationManager 指標將可供使用。

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

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

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

  • AWS 加密SDK會從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務,以及取決於執行時間提供的 AWS 加密SDK相依性的任務都會受到影響。請參閱這些 AWS Glue 任務遷移的說明。

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

    • 為了安全升級,我們建議您先遷移至包含 AWS 加密SDK橋接器版本的 AWS Glue 2.0/3.0 任務。執行任務一次,以使用 AWS 加密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 未輸入 UDFs,但 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 中的 classpath 與--user-jars-first AWS Glue 任務參數衝突。

  • AWS Glue 4.0 支援自動擴展。因此,啟用自動擴展時, ExecutorAllocationManager 指標將可供使用。

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

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

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

  • AWS 加密SDK會從 1.x 升級至 2.x。 AWS Glue 使用 AWS Glue 安全組態的任務,以及取決於執行時間提供的 AWS 加密SDK相依性的任務都會受到影響。請參閱這些 AWS Glue 任務遷移的說明。

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

    • 為了安全升級,我們建議您先遷移至包含 AWS 加密SDK橋接器版本的 AWS Glue 2.0/3.0 任務。執行任務一次,以使用 AWS 加密SDK橋接器版本。

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

請參閱 Spark 遷移文件:

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

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

Hudi

  • Spark SQL支援改進:

    • 透過 Call Procedure命令,新增了升級、降級、引導、清除和修復的支援。Spark Create/Drop/Show/Refresh Index 中可以有語法SQL。

    • 與 Spark DataSource 相比,透過 Spark 的用量之間的效能差距已關閉SQL。資料來源過去的寫入速度比 快SQL。

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

    • 將大量insert操作中的UDF轉換取代為RDD轉換,以降低使用 的成本 SerDe。

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

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

PostgreSQL

  • 已解決幾個漏洞 (CVEs)。

  • 原生支援 Java 8。

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

MongoDB

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

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

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

  • "Partitioner" 選項僅限於 ShardedPartitionerPaginateIntoPartitionsPartitionerSinglePartitionPartitioner。因為階段運算子不支援 MongoDB ,所以無法PaginateBySizePartitioner針對 Amazon DocumentDB 使用預設 SamplePartitioner和 API。如需詳細資訊,請參閱支援的 MongoDB APIs、操作和資料類型

Delta Lake

  • Delta Lake 現在支援在 中計時SQL,以輕鬆查詢較舊的資料。透過此更新,現在可在 Spark SQL和透過 使用時間行程 DataFrame API。已為 TIMESTAMP中的目前版本新增支援SQL。

  • Spark 3.3 推出 Trigger。AvailableNow 用於執行串流查詢,相當於批次查詢Trigger.Once的 。使用 Delta 資料表作為串流來源時,也提供此支援。

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

  • 在 Scala 和 Python DESCRIBEDETAIL中支援 DeltaTable API。它會使用 DeltaTable API或 Spark 擷取有關 Delta 資料表的詳細資訊SQL。

  • 支援從 SQL DeleteMergeUpdate 命令傳回操作指標。先前,這些SQL命令會傳回空的 DataFrame,現在會傳回 DataFrame 具有所執行操作相關實用指標的 。

  • 最佳化效能改善項目:

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

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

  • 其他顯著的變更:

Apache Iceberg

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

  • 已新增使用變更型遞交來解決服務端遞交衝突的常見REST目錄用戶端。

  • AS OF 支援SQL時間行程查詢的語法。

  • 新增 merge-on-read對 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

僅為次要變更。

我的SQL

僅為次要變更。

Amazon Redshift

AWS Glue 4.0 具有新的 Amazon Redshift 連接器和新的JDBC驅動程式。如需增強功能以及如何從先前 AWS Glue 版本遷移的資訊,請參閱 Redshift 連線

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

以下是相依性升級:

相依性 in AWS Glue 4.0 版本 in AWS Glue 3.0 版 in AWS Glue 2.0 版本 in 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驅動程式升級:

驅動程式 JDBC 過去版本的驅動程式 AWS Glue 版本 JDBC in AWS Glue 3.0 驅動程式版本 JDBC 驅動程式 in AWS Glue 4.0 版
我的SQL 5.1 8.0.23 8.0.23
Microsoft SQL 伺服器 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:連接器升級

以下是連接器升級:

驅動程式 連接器 in 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