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.datetimeRebaseModeInWriteconfig 來決定在寫入日期/時間戳時,應該使用傳統混合 (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。