Gluten 加速 Spark 引擎簡介

Gluten accelerated Spark 引擎是經過優化的高性能引擎,在 watsonx.data. Spark 引擎使用 Gluten 將 SQL 執行卸載至 Velox,Velox 是一個開放原始碼執行引擎 (以 C++ 實作),藉此加速 SparkSQL 的計算,以降低執行工作負載的成本。

Gluten 是專為加速 Spark SQL 和 DataFrame 工作負載而設計的原生引擎外掛,透過整合原生引擎與 SparkSQL,,充分利用 Spark SQL 框架的高擴充性和原生引擎的優異效能。 它與 Apache Spark API 完全相容,確保無須更改程式碼。

Gluten 加速 Spark 引擎的特點

  • 支援檔案格式 Apache Parquet 和 Apache Avro。

  • 改善表格掃描效能。

  • 利用連接和聚合功能加速大型 SQL 查詢。

  • 支援 Delta、Hudi、Iceberg 及 Hive 目錄。

  • 使用 UPDATE、DELETE、MERGE INTO、INSERT 和 CREATE TABLE AS SELECT 更快地寫入 Delta 和 Parquet,包括包含數千列的寬表。

  • 預設以 hash-joins 取代 sort-merge 連結。

限制

  • 使用 Amazon S3 物件儲存庫支援 DAS 以提交應用程式,但其他物件儲存庫 (如 ADLS 和 GCS) 則需要傳送明確的憑證。

  • 較小的查詢不會加速。

  • 目錄關聯僅支援 s3 物件儲存。

  • 回退至 JVM

    • ANSI:Gluten 目前不支援 ANSI 模式。 如果啟用 ANSI,Spark 計畫的執行會回落到 vanilla Spark。

    • FileSource 格式:目前 Gluten 只支援 Parquet 檔案格式,並部分支援 ORC。 如果使用其他格式,掃描運算元會退回到 vanilla spark。

  • 不相容的行為

    • JSON 函式:Velox 在 JSON 資料中只支援雙引號包圍的字串,不支援單引號。 如果使用單引號,Gluten 會產生不正確的結果。

    • Parquet 讀取設定:Gluten 支援 spark.files.ignoreCorruptFiles,預設值為 false,如果為 true,行為與 config false 相同。 Gluten 會忽略 spark.sql.parquet.datetimeRebaseModeInRead,它只會回傳寫入 parquet 檔案的內容。 它沒有考慮遺傳混合曆(Julian Gregorian)和 Proleptic Gregorian 曆法之間的差異。 如果使用香草火花,結果可能會有所不同。

    • Parquet 寫入設定:Spark 有 spark.sql.parquet.datetimeRebaseModeInWrite config 來決定在寫入日期/時間戳時,應該使用傳統混合 (Julian + Gregorian) 日曆還是 Proleptic Gregorian 日曆。 如果要讀取的 Parquet 是由 Spark 寫入,且此設定為 true,Velox 的 TableScan 在讀回時會輸出不同的結果。

  • 溢出

    OutOfMemoryException 當 shuffle partitions 設定為大量時,仍可能在目前的 spill-to-disk 功能實作中被觸發。 發生此情況時,請嘗試減少分割區數目,以消除 OOM。

  • CSV 讀取

    • 標頭選項應為 true。 而現在我們只支援 DatasourceV1,也就是說,使用者應該設定 spark.sql.sources.useV1SourceList=csv。 不支援使用者定義的讀取選項,這將使 CSV 讀取在大多數情況下回到 vanilla Spark。 當使用者指定的 schema 與檔案 schema 不同時,CSV 讀取也會退回到 vanilla Spark 並記錄警告。

    • 有關 Gluten 限制的詳細資訊,請參閱 限制

  • 啟用 FIPS 的環境不支援 Gluten。

麩質的最佳做法

  • Gluten 需要大型 OffHeap 記憶體,因為它整合了原生後端,也就是使用 Apache Arrow 的 Velox OffHeap columnar 格式,這對於大型資料處理非常重要,且不會超出 JVM 堆的限制。

  • 如果沒有提供足夠的 offHeap 記憶體,可能會導致潛在的 OOM(請參閱 限制 )。 因此,執行器記憶體的 75% 被設定為 offHeap。

  • 使用者可以使用配置 ae.spark.offHeap.factor 調整 offHeap, 的記憶體百分比,該配置接受 (0-1) 排他值,例如:0.75。

  • 如果用戶的工作負載有大量回退到基於 Java 的 spark,建議用戶將此設定為較低的值,即 < 0.5。(請參閱 限制 ),以便在回退到基於 Java 的 spark 執行時不會發生 OOM。

  • 建議將此設定為較高的值。例如,如果工作負載在 Gluten 上原生執行而不需要回退,則建議設定為 0.75 或以上。

預設設定值為 0.75。