Fabric 中的 Apache Spark 執行階段
Microsoft Fabric 執行時間是以 Apache Spark 為基礎的 Azure 整合平臺,可執行和管理資料工程和資料科學體驗。 它會結合內部和開放原始碼來源的重要元件,為客戶提供完整的解決方案。 為了簡單起見,我們將 Apache Spark 所提供的 fabric 執行階段稱為 Fabric 執行階段Microsoft。
Fabric 執行階段的主要元件:
Apache Spark - 功能強大的開放原始碼分散式運算連結庫,可進行大規模的資料處理和分析工作。 Apache Spark 為資料工程和資料科學體驗提供多功能且高效能的平臺。
Delta Lake - 一個開放原始碼儲存層,為 Apache Spark 帶來 ACID 異動和其他資料可靠性功能。 Delta Lake 已整合在 Fabric 執行階段內,可增強資料處理功能,並確保跨多個並行作業的資料一致性。
原生執行引擎 - 是 Apache Spark 工作負載的轉換增強功能,可直接在 Lakehouse 基礎結構上執行 Spark 查詢來提供顯著的效能提升。 整合時不需要變更程序代碼,並避免廠商鎖定,在運行時間 1.3 (Spark 3.5) 中跨 Apache Spark API 支援 Parquet 和 Delta 格式。 此引擎可提升查詢的速度比傳統 OSS Spark 快四倍,如 TPC-DS 1TB 基準檢驗所示,降低營運成本,並提升各種數據工作的效率,包括數據擷取、ETL、分析和互動式查詢。 它以 Meta 的 Velox 和 Intel 的 Apache 麩質為基礎,將資源使用優化,同時處理不同的數據處理案例。
Java/Scala、Python 和 R 的預設層級套件 - 支援各種程式設計語言和環境的套件。 這些套件會自動安裝並設定,讓開發人員套用其慣用的程式設計語言來進行資料處理工作。
Microsoft Fabric 執行階段是以強固的開放原始碼操作系統為基礎,確保與各種硬體組態和系統需求相容。
在下方,您可以找到主要元件的完整比較,包括 Apache Spark 版本、支援的作業系統、Java、Scala、Python、Delta Lake 和 R,適用於 Microsoft Fabric 平臺內的 Apache Spark 型運行時間。
提示
請一律針對目前為 Runtime 1.3 的生產工作負載使用最新的 GA 運行時間版本。
Runtime 1.1 | Runtime 1.2 | Runtime 1.3 | |
---|---|---|---|
Apache Spark | 3.3.1 | 3.4.1 | 3.5.0 |
作業系統 | Ubuntu 18.04 | Mariner 2.0 | Mariner 2.0 |
Java | 8 | 11 | 11 |
Scala | 2.12.15 | 2.12.17 | 2.12.17 |
Python | 3.10 | 3.10 | 3.11 |
Delta Lake | 2.2.0 | 2.4.0 | 3.2 |
R | 4.2.2 | 4.2.2 | 4.4.1 |
請流覽 Runtime 1.1、Runtime 1.2 或 Runtime 1.3,以探索特定執行階段版本的詳細資料、新功能、改進和移轉案例。
網狀架構最佳化
在 Microsoft Fabric 中,Spark 引擎和 Delta Lake 實作都會納入平臺特定的最佳化和功能。 這些功能的設計目的是在平臺中使用原生整合。 請務必注意,您可以停用所有這些功能,以達到標準 Spark 和 Delta Lake 功能。 Apache Spark 的 Fabric 執行階段包含:
- Apache Spark 的完整開放原始碼版本。
- 近 100 個內建、相異查詢效能增強的集合。 這些增強功能包括資料分割快取等功能(讓 FileSystem 資料分割快取減少中繼存放區呼叫),以及交叉聯結至純量子查詢的投影。
- 內建智慧型快取。
在 Apache Spark 和 Delta Lake 的 Fabric 執行階段中,有兩個主要用途的原生寫入器功能:
- 它們為撰寫工作負載提供不同的效能,以最佳化寫入程式。
- 它們預設為 Delta Parquet 檔案的 V 順序最佳化。 Delta Lake V 順序最佳化對於在所有網狀架構引擎上提供絕佳的讀取效能至關重要。 若要深入瞭解其運作方式及管理方式,請參閱 Delta Lake 資料表最佳化和 V-Order 上的專用文章。
多個執行階段支援
Fabric 支援多個執行階段,讓使用者能夠彈性地在它們之間順暢地切換,將不相容或中斷的風險降到最低。
根據預設,所有新的工作區都會使用目前 為 Runtime 1.3 的最新運行時間版本。
若要變更工作區層級的執行階段版本,請移至工作區設定> 資料工程師/科學 > Spark 計算>工作區層級預設值,然後從可用的選項中選取所需的執行階段。
進行這項變更之後,工作區內的所有系統建立項目,包括 Lakehouses、SJD 和 Notebooks,將會使用從下一個 Spark 工作階段開始的新選取工作區層級執行階段版本運作。 如果您目前使用筆記本搭配作業或任何 lakehouse 相關活動的現有工作階段,該 Spark 工作階段會繼續如前所述。 不過,從下一個工作階段或作業開始,將會套用選取的執行階段版本。
Spark 設定上執行階段變更的後果
一般而言,我們的目標是移轉所有Spark設定。 不過,如果我們識別Spark設定與執行階段 B 不相容,我們會發出警告訊息,避免實作設定。
連結庫管理上執行階段變更的後果
一般而言,我們的方法是將所有連結庫從執行階段 A 遷移至執行階段 B,包括公用和自定義執行階段。 如果 Python 和 R 版本保持不變,連結庫應該正常運作。 不過,對於 Jar,由於相依性變更,以及 Scala、Java、Spark 和作業系統中的變更等其他因素,它們可能無法運作。
使用者負責更新或取代任何不適用於執行階段 B 的程式庫。如果發生衝突,這表示執行階段 B 包含原本在執行階段 A 中定義的程式庫,我們的程式庫管理系統會嘗試根據使用者的設定,為執行階段 B 建立必要的相依性。 不過,如果發生衝突,建置程式將會失敗。 在錯誤記錄檔中,使用者可以查看哪些連結庫造成衝突,並調整其版本或規格。
升級 Delta Lake 通訊協定
Delta Lake 功能一律與回溯相容,確保以較低 Delta Lake 版本建立的資料表可以順暢地與較高版本互動。 不過,啟用特定功能時(例如,使用 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion)
方法,可能會危害與較低 Delta Lake 版本的轉送相容性。 在這種情況下,必須修改參考升級資料表的工作負載,以符合維護相容性的 Delta Lake 版本。
每個 Delta 資料表都會與通訊協定規格相關聯,並定義其支援的功能。 與資料表互動的應用程式,無論是用於讀取或寫入,都依賴此通訊協定規格來判斷它們是否與資料表的功能集相容。 如果應用程式無法處理資料表通訊協定中所列出的功能,則無法讀取或寫入該資料表。
通訊協定規格分為兩個不同的元件:讀取通訊協定和寫入通訊協定。 請流覽「Delta Lake 如何管理功能相容性?」頁面,以閱讀其詳細資料。
使用者可以在 PySpark 環境中以及 Spark SQL 和 Scala 中執行命令 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion)
。 此命令可讓他們在 Delta 資料表上起始更新。
請務必注意,在執行此升級時,使用者會收到警告,指出升級 Delta 通訊協定版本是無法執行的程式。 這表示一旦執行更新,就無法復原。
通訊協定版本升級可能會影響現有 Delta Lake 資料表讀取器、寫入器或兩者的相容性。 因此,建議您謹慎行事,並在必要時升級通訊協定版本,例如在 Delta Lake 中採用新功能時。
此外,使用者應該使用新的通訊協定版本來驗證所有目前和未來的生產工作負載和程式都與 Delta Lake 資料表相容,以確保順暢轉換,並防止任何潛在的中斷。
Delta 2.2 與 Delta 2.4 變更
在最新的 Fabric 執行時間版本 1.3 和 Fabric 執行時間 1.2 版中,預設資料表格式 (spark.sql.sources.default
) 現在是delta
。 在舊版 Fabric 執行時間、1.1 版和所有包含 Spark 3.3 或以下的 Apache Spark Synapse Runtime 上,預設資料表格式已定義為parquet
。 如需 Azure Synapse Analytics 與 Microsoft Fabric 之間的差異,請參閱 Apache Spark 組態詳細 資料。
每當省略資料表類型時,所有使用 Spark SQL、PySpark、Scala Spark 和 Spark R 建立的資料表預設都會建立資料表 delta
。 如果腳本明確設定資料表格式,則會加以遵守。 Spark 建立資料表命令中的命令 USING DELTA
會變成備援。
應該修訂預期或假設 parquet 資料表格式的腳本。 Delta 資料表不支援下列命令:
ANALYZE TABLE $partitionedTableName PARTITION (p1) COMPUTE STATISTICS
ALTER TABLE $partitionedTableName ADD PARTITION (p1=3)
ALTER TABLE DROP PARTITION
ALTER TABLE RECOVER PARTITIONS
ALTER TABLE SET SERDEPROPERTIES
LOAD DATA
INSERT OVERWRITE DIRECTORY
SHOW CREATE TABLE
CREATE TABLE LIKE