如何在實際應用中選擇Blaze或Apache Gluten?

Blaze 與 Apache Gluten 深入研究報告:技術實現、性能對比與選型指南

一、項目背景與技術演進

1.1 大數據處理性能瓶頸與 Native 引擎興起

隨著大數據量處理需求的不斷增長,基于 JVM 的 Spark 在 CPU 密集型場景下的性能瓶頸日益凸顯。從 Spark 2.4 版本后,Spark 在特定算子(如 HashAgg、HashJoin、TableScan 等)的性能提升變得緩慢,尤其是在處理大規模數據時,JVM 的內存管理和 GC 開銷成為性能提升的主要障礙。Databricks 等公司的測試表明,在 Intel CPU 上運行 Spark 時,CPU 使用率常常達到 80%-90%,成為性能瓶頸。

為應對這一挑戰,業界開始探索將 Spark 與 Native 引擎結合的解決方案,通過將部分計算任務下推到本地計算引擎執行,充分利用現代 CPU 特性(如 SIMD 指令集)和內存管理優勢。這一趨勢催生了多個 Spark Native 執行引擎項目,其中最具代表性的是 Blaze 和 Apache Gluten。

1.2 Blaze 與 Gluten 項目發展歷程

Blaze是由快手公司于 2021 年底開始調研、2022 年正式立項開發的 Spark 向量化引擎。該項目基于 Apache DataFusion 開發,采用 Rust 語言實現,旨在通過向量化技術提升 Spark SQL 的執行效率。Blaze 于 2023 年開源,目前已在快手內部覆蓋近一半的例行作業,每天使用的資源開銷占據整個集群總量的 30%(優化前這部分作業占資源達 40-50%)。

Apache Gluten項目則由 Intel 和 Kyligence 等公司發起,其前身是 Gazelle 項目。Gluten 作為一個中間層,負責將基于 JVM 的 SQL 引擎的執行任務分流到原生引擎處理。該項目于 2023 年進入 Apache 孵化器,目前已獲得 1300+ GitHub 星標,吸引了來自超過 25 家公司的 163 位以上的貢獻者參與。Gluten 進一步增強了 Spark 工作負載對英特爾架構的依賴性優化,已被 18 家客戶采用,包括 2024 年新增的 8 家。

二、技術架構與實現原理

2.1 Blaze 技術架構與實現

Blaze 是一個基于 Apache DataFusion 項目封裝的向量化執行引擎中間件,通過該組件既能夠充分發揮 Spark 分布式計算框架的優勢,同時也能夠利用 DataFusion Native 向量化算子執行的性能優勢。

2.1.1 核心組件與執行流程

Blaze 的核心架構可以抽象為四個主要組件:

  • Blaze Session Extension:主要負責控制整個 Spark 執行過程中算子的檢查和轉換操作
  • Plan SerDe:通過 protobuf 來對 DataFusion 執行計劃進行序列化和反序列化
  • JNI Gateways:通過 JNI 實現數據和執行計劃的傳遞轉換
  • Native Operators:將 Spark 的執行計劃映射到 Native 引擎的具體執行
  • Blaze 的執行過程可分為三個主要步驟:
    • 物理執行計劃的轉換:將 Spark 生成的物理執行計劃轉換為對應的 Native Plan
    • Native Plan 的生成和提交:將轉換后的計劃通過 JNI 傳遞給底層的 DataFusion 執行
    • Native 執行:由 DataFusion 引擎執行向量化計算

Blaze 采用 Spark 3.0 引入的 Session Extension 機制,在生成物理執行計劃到每個 Stage 實際執行之前,通過 Blaze 的 Extension 組件對整個 Stage 中的所有算子進行檢查和翻譯。對于無法轉換為 Native 執行的算子,Blaze 會在算子前后加入列轉行和行轉列的算子,通過 FFI 實現數據在 Native 和 JVM 之間的交換。

2.1.2 向量化執行與內存管理

Blaze 底層技術實現采用的是 Rust,是基于 Apache 的 DataFusion 引擎開發的。DataFusion 項目采用列式計算,并對主要的表達式計算實現了 Native 向量化支持,經過翻譯后的 Native 算子執行效率遠高于 Spark 原生 JVM 執行。

在內存管理方面,Blaze 實現了一套獨特的策略:

  • 堆外內存管理:Blaze Native 代碼直接申請堆外內存,避免了 JVM GC 的影響
  • 二級 Spill 策略:當堆外內存不足時,Blaze 會在堆內開辟空間,通過 JNI+NIO 方式將需要 Spill 的數據直接寫入堆內,這樣就能夠把堆外空間釋放出來;當堆內空間也不足時,將這部分內存塊寫到磁盤文件
  • 自定義內存分配器:Blaze 在 Agg 算子中使用 hashbrown 進行 hash 表的維護,它是 google SwissTable 的高效實現,在性能和內存開銷上都有很大優勢

2.1.3 列式 Shuffle 與優化

Blaze 對傳統行式 shuffle 進行了優化,采用列式 shuffle 來更好地提速。在 Shuffle 數據轉換上,Blaze 最初采用 Arrow-RPC 格式,但發現處理字符串列時壓縮效率不理想。為此,Blaze 實現了自定義的格式,通過把字符串存儲改成按順序寫入每行的長度和字符串字節數組,并且使用前綴編碼的處理方式,讓長度在大部分 case 下只占 1~2 字節,這樣就能夠很好地觸發 ZSTD 的壓縮。

2.2 Apache Gluten 技術架構與實現

Apache Gluten 是一個負責將基于 JVM 的 SQL 引擎的執行任務分流到原生引擎處理的中間層設計項目。其核心思路是通過本地化(Native)引擎優化 Spark 的執行效率,解決 Spark 在 CPU 密集型場景下的性能瓶頸。

2.2.1 架構設計與工作原理

Gluten 的核心架構設計是一個中間層,向上承接 Spark 框架,向下對接不同類型的后端本地計算引擎。其工作原理如下:

  • 物理執行計劃轉換:Gluten 將 Spark 生成的物理執行計劃轉換為 Substrait 格式的計劃(基于 Protobuf 的跨語言序列化協議)
  • 計劃分發與執行:將 Substrait 計劃發送至不同的后端引擎(如 Velox 或 ClickHouse)執行
  • 結果整合:將后端引擎的執行結果整合,返回給 Spark 框架

Gluten 采用 Spark 2.4 版發展出的為拓展 GPU 而設定的 public common API 接口,以插件形式實現 Spark 對接,使得本地計算引擎得以在 Spark 里運作。在單一任務執行時,Gluten 監測 Operator 是否能被本地庫執行,若能執行,就通過 Gluten 插件,對接 JNI 接口下推算子,然后選擇后端引擎類型執行;若不能執行,就執行 fallback,回到 JVM 計算引擎做執行。

2.2.2 多后端引擎支持

Gluten 支持多種后端引擎,目前主要支持兩種主流的計算引擎:

  • Velox:由 Meta(Facebook)公司開源的 C++ 向量化執行引擎庫,由 Gluten 團隊主要負責維護,包括查詢計劃的轉換、算子下推等
  • ClickHouse:由 Kyligence 團隊維護的高性能 OLAP 引擎,包括源碼管理和規劃

Gluten 項目當前只能夠選擇單一后端引擎,即選擇 Velox 引擎,那么在編譯階段和執行階段都使用 Velox 引擎。未來計劃通過成本模型(Cost Model)進行后端引擎的消費分析,以進行引擎的策略選用,即有多個不同種類型后端,在實際分析時,通過在 Gluten 中的成本模型,去分析在哪一個后端的消費是最低的,性能是最優的。

2.2.3 列式 Shuffle 與內存管理

Gluten 改寫了傳統行式 shuffle,使用列式 shuffle 來更好地提速,這樣也可以避免 fallback 問題(即 C2R\R2C 的數據轉換問題)。列式 shuffle 帶來的好處包括:

  • 硬件特性發揮:使用列式 shuffle 可以使得一些硬件特性得以發揮,例如 AVX 技術帶來的提速
  • 數據通信減少:在實際引擎計算層面,使用列式 shuffle 可以減少 10% 到 20% 的數據通信,能夠大幅減少 shuffle 的執行時間

在內存管理方面,Gluten 采用 Spark 統一的參數變量,對內存做統一的管理,實現的模式是 Off Heap Memory(堆外內存)。調整 Spark 中的 Off Heap 參數,通過調用這個參數做內存的統一管理,調整過程中,當流轉到本地計算庫時候,本地計算是可以直接通過 Off Heap 部分的內存做分配,即直接讓本地計算的內存調用直接在 Off Heap 內存中使用。

2.3 技術架構對比分析

Blaze 和 Apache Gluten 在技術架構上有許多相似之處,也存在一些關鍵差異:

  • 相似點:
    • 兩者都基于 Spark 插件機制實現,不改變 Spark 的分布式控制流和資源管理
      都采用將 Spark 物理執行計劃轉換為中間格式(Blaze 使用 ProtoBuf,Gluten 使用 Substrait)的方式,交由后端 Native 引擎執行
    • 都支持向量化執行和列式 Shuffle,以提高計算效率和減少數據轉換開銷
    • 都實現了 fallback 機制,當遇到不支持的算子時回退到 Spark 原生執行
  • 差異點:
    • 中間格式:Blaze 將 Spark 物理執行計劃轉換為 Rust DataFusion 的向量化執行計劃,通過 JNI 方式傳遞給底層的 DataFusion 執行;Gluten 將 Spark 的物理執行計劃轉化為 Substrait plan,然后再傳遞給底層的 Native 執行引擎(如 Velox 或 ClickHouse)
    • 開發語言:Blaze + DataFusion 是基于 Rust 編寫;Gluten + Velox 是基于 C++ 編寫
    • 執行引擎:Blaze 依賴 DataFusion 引擎;Gluten 支持 Velox 和 ClickHouse 雙引擎
    • 序列化協議:Blaze 在物理執行計劃傳遞部分采用 ProtoBuf 格式;Gluten 在物理執行計劃傳遞部分采用 Substrait 格式
    • 內存管理:Blaze 實現了二級 Spill 策略;Gluten 采用統一的 Off Heap 內存管理

三、性能對比與優化效果

3.1 Blaze 性能表現與優化效果

Blaze 在多種基準測試和實際生產環境中表現出顯著的性能提升

3.1.1 基準測試結果

在 TPC-DS 1TB 數據測試中,Blaze 展現出了優異的性能表現:

  • 單個查詢最高能達到 10 倍的性能提升
  • 整體平均性能提升超過 2 倍
  • 在 80 個 Task 并發的測試環境下,Blaze 能夠跑通所有的 TPC-DS 查詢,并且在多個查詢中表現突出。這一結果證明了 Blaze 在復雜數據分析場景下的高效性。

3.1.2 生產環境收益

Blaze 在快手內部生產環境的實際落地情況如下:

  • 目前已在一部分生產 ETL 任務上灰度上線
  • 單個任務最大可以達到四倍多的性能提升
  • 平均性能提升已經達到兩倍以上
  • 已覆蓋近一半的例行作業,每天使用的資源開銷占據整個集群總量的 30%(優化前這部分作業占資源達 40-50%)

這些數據表明,Blaze 不僅在基準測試中表現優異,在實際生產環境中也能帶來顯著的性能提升和資源節省。

3.1.3 內存使用與 API 復雜度

Blaze 在內存使用方面也表現出色。在單機測試中,Blaze 在 PageRank、KMeans 和 GMM 等算法上的內存消耗比 Spark 低 10 倍。這主要得益于 Blaze 的向量化執行和高效的內存管理機制。

此外,Blaze 在 API 復雜度方面也有優勢。Blaze 使用的不同 API 數量遠少于 Spark,降低了認知負擔。Spark 的內置實現使用約 30 個不同的并行原語來完成不同的任務,而 Blaze 只使用 MapReduce 函數和不到 5 個實用函數。

3.2 Apache Gluten 性能表現與優化效果

Apache Gluten 在多種測試環境和實際應用中也表現出了顯著的性能提升:

3.2.1 基準測試結果

Gluten 在 TPC-H 和 TPC-DS 等基準測試中表現優異:

  • 在 TPC-H 測試中,Gluten 比原生 Spark 快 3.3 倍
  • 在 TPC-DS 測試中,Gluten 比原生 Spark 快 2.7 倍
  • TPC-H 測試單查詢最高加速 14.5 倍
  • 用戶不用修改一行代碼就可以帶來 Spark SQL 任務性能 2 倍左右的提升

在英特爾的協助下,Gluten 已被 18 家客戶采用,其中包括 2024 年新增的 8 家。美團在私有云環境中,已經有超過 10 萬個任務采用 Gluten。

3.2.2 生產環境收益

Gluten 在生產環境中的實際應用效果如下:

  • 可使 ETL 任務成本降低 40% 以上
  • 在 CPU 使用率方面,使用 Gluten 后,CPU 使用率明顯降低,從 80%-90% 降至更合理的水平
  • 實現了對 92% 的 Spark 通用函數和 84% 的操作符的支持

3.2.3 硬件加速與能效比

Gluten 特別針對 Intel CPU 進行了優化,能夠充分發揮現代 CPU 的特性:

  • 在英特爾 ? 至強 ? 6960P 處理器上實現了最高 3.3 倍性能提升
  • 在英特爾 ? 至強 ? 6780E 上實現了每瓦性能 2.74 倍提升
  • Intel QAT 技術可帶來額外 20% 的性能提升(須搭配 Intel 最新硬件平臺)

3.3 性能對比分析

將 Blaze 和 Apache Gluten 的性能數據進行對比,可以發現以下特點:

  • 相同點:
    • 兩者在 TPC-DS 和 TPC-H 等基準測試中都表現出比原生 Spark 顯著的性能提升
    • 在實際生產環境中都能帶來 2 倍以上的平均性能提升
    • 都能顯著降低資源消耗和作業成本
  • 差異點:
    • 峰值性能:Blaze 在單個查詢上最高可達 10 倍性能提升,而 Gluten 在 TPC-H 單查詢上最高加速 14.5 倍,兩者在不同測試場景中表現出不同的峰值性能
    • 平均性能:Blaze 的平均性能提升約為 2 倍,Gluten 的平均性能提升約為 2-5 倍,Gluten 在某些場景下的平均性能提升更顯著
    • 硬件優化:Gluten 特別針對 Intel CPU 進行了優化,能更好地發揮 Intel 架構的特性,在 Intel 平臺上的能效比提升更為明顯
      內存使用:Blaze 在內存使用方面表現更為出色,特別是在 PageRank、KMeans 和 GMM 等算法上的內存消耗比 Spark 低 10 倍

四、社區生態與發展現狀

4.1 Blaze 社區生態與發展

Blaze 社區經歷了從相對不活躍到逐漸活躍的發展過程:

4.1.1 社區參與度

Blaze 開源社區的發展歷程如下:

  • 前期活躍度不高,國內參與公司較少
  • 最近有開始活躍的趨勢
  • 已吸引了一些社區用戶貢獻,如對 ORC 文件格式的集成和 Paimon Scan 算子的實現

快手 Blaze 團隊在開發過程中也向 DataFusion 社區反饋了很多代碼,包括內存管理機制、支持 HDFS 讀寫的 Remote Storage API、以及各種關于 sort 的深度優化。

4.1.2 功能擴展與生態建設

Blaze 的功能覆蓋和生態建設進展如下:

  • 算子覆蓋度:開發工作基本是按照線上使用頻率來推進的,最常見的算子基本都支持;已支持 Parquet 格式,但文本、ORC 等格式暫時還沒有支持;SortMergeJoin 暫時還不支持 Post Filter;BroadcastHashJoin 暫時還不支持在 Driver 端構建 HashMap 和內存管理
    數據類型支持:復雜數據類型 Struct、List 等已開發完成,正在進行全面測試
  • 生態擴展:2024Q4 與阿里云進行合作共建,完成了 Blaze 對 Celeborn 的支持;社區用戶貢獻了對 ORC 文件格式的集成;社區用戶實現了 Paimon Scan 算子,支持 Blaze 讀取 Paimon 表功能

4.1.3 版本更新與功能演進

Blaze 的版本演進和功能更新情況如下:

  • 最新版本:v5.0.0(2024 年 11 月 15 日發布)
  • 新功能:支持 UDAF falling back;支持原生 round-robin partitioner 和 range partitioner;支持 Spark 3.5 引入的 WindowGroupLimitExec;支持當構建側過大時將 SHJ 回退到 SMJ;完全支持 Apache Celeborn shuffle 服務;初步支持 Apache Uniffle shuffle 服務;初步支持 Apache Paimon 數據源
  • 改進:改進了 AggExec/SortMergeJoinExec 中的內存管理,減少 OOM 發生次數;改進了指標統計
  • 修復:修復了字符串到數據類型轉換不一致問題;修復了 Bloom Filter Join 不一致問題;修復了動態分區寫入時的排序順序錯誤;修復了 sha2x 函數不一致問題

4.2 Apache Gluten 社區生態與發展

Apache Gluten 作為 Apache 項目,擁有更為活躍的社區生態和更廣泛的參與度:

4.2.1 社區規模與貢獻

Gluten 社區的規模和貢獻情況如下:

  • 已獲得 1300+ stars
  • 吸引了來自超過 25 家公司的 163 位以上的貢獻者參與
  • 英特爾 Gluten 團隊主導委員會并領導該項目

已被 18 家客戶采用,其中包括 2024 年新增的 8 家

4.2.2 功能覆蓋與生態集成

Gluten 的功能覆蓋和生態集成情況如下:

  • 算子覆蓋:實現了對 84% 的 Spark 操作符的支持
  • 函數支持:實現了對 92% 的 Spark 通用函數的支持
  • 數據類型支持:實現了對 93% 的常見數據類型的支持
  • 安裝與文檔:安裝和文檔覆蓋率達到 60%
  • 云原生集成:與 Apache Celeborn 集成,通過 Remote Shuffle Service 解決本地 Shuffle 的存算耦合問題
  • 生態支持:支持 DeltaLake、Iceberg 和 Hudi 等數據湖格式,主要支持 Read 功能,Write 功能正在與特定客戶合作定制化開發

4.2.3 版本演進與未來規劃

Gluten 的版本演進和未來規劃如下:

  • 最新版本:v1.4.0(2024 年 12 月 20 日發布)
  • 新功能:添加了更多 Spark 算子支持,包括 range、collect limit 等;更新了 OAP 的 Velox 代碼庫到 2025/05/12 版本
  • 未來計劃:2025 年上半年聚焦于對 Spark 4.0 框架的支持;持續提升性能表現,包括 BHJ、SMJ 等;處理階段 fallback 中涉及到 OnHeap/OffHeap 的內存管理工作;持續推進 shuffle 優化;實現對 Flink 的支持,將 Gluten 打造成流批一體的框架

4.3 社區生態對比分析

將 Blaze 和 Apache Gluten 的社區生態進行對比,可以發現以下特點:

  • 相同點:
    • 都在不斷擴展功能覆蓋和生態支持
    • 都在積極與其他大數據組件集成,如 Celeborn 和數據湖格式
    • 都在持續優化性能和穩定性
  • 差異點:
    • 社區活躍度:Blaze 社區前期活躍度不高,最近開始活躍;Gluten 作為 Apache 項目,社區活躍度更高,參與公司和貢獻者更多
    • 功能覆蓋:Gluten 的算子、函數和數據類型覆蓋度更高,達到 80% 以上;Blaze 的算子覆蓋度按使用頻率推進,部分格式和功能尚未支持
    • 生態集成:Gluten 支持更多的數據湖格式和更完善的云原生集成;Blaze 雖然也在擴展生態,但目前支持的生態系統相對較少
    • 版本演進:Gluten 有更明確的版本發布計劃和未來路線圖;Blaze 的版本更新相對不那么規律

五、部署與使用對比

5.1 Blaze 部署與使用

Blaze 的部署和使用流程相對復雜,需要一定的技術基礎:

5.1.1 部署流程

Blaze 的部署主要包括以下步驟:

  • 環境準備:
    • 需要安裝 Rust 環境
    • 需要編譯 Blaze 的 Native 庫
  • Spark 配置:
    • 通過 Spark 的 Session Extension 機制配置 Blaze 插件
    • 配置 Blaze 相關參數,如是否啟用 Blaze、內存分配等
  • 執行計劃轉換:
    • Blaze 通過 Spark 3.0 引入的 Session Extension 機制,在生成物理執行計劃到每個 Stage 實際執行之前,對整個 Stage 中的所有算子進行檢查和翻譯
    • 對于無法轉換為 Native 執行的算子,Blaze 會在算子前后加入列轉行和行轉列的算子,通過 FFI 實現數據在 Native 和 JVM 之間的交換

5.1.2 使用難度

Blaze 的使用難度主要體現在以下幾個方面:

  • 技術棧要求:需要對 Rust 和 DataFusion 有一定的了解,因為 Blaze 是基于 Rust 和 DataFusion 開發的
  • 算子轉換:需要將 Spark 生成的物理執行計劃轉換為 Rust DataFusion 的向量化執行計劃,通過 JNI 方式傳遞給底層的 DataFusion 執行
  • 兼容性處理:對于不支持的算子,需要處理行列轉換帶來的性能開銷,Blaze 實現了基于規則的策略來決策部分算子是否需要翻譯

5.1.3 最佳實踐與優化建議

Blaze 的使用最佳實踐和優化建議包括:

  • 算子選擇:優先選擇 Blaze 支持的算子,以獲得最佳性能
  • 數據格式:優先使用 Parquet 格式,因為 Blaze 對 Parquet 的支持最為完善
  • 內存管理:合理配置堆外內存和堆內內存的比例,避免 OOM 問題
  • 調試與監控:利用 Blaze 提供的指標統計功能,監控執行性能和資源使用情況

5.2 Apache Gluten 部署與使用

Apache Gluten 的部署和使用相對簡單,對用戶透明性更高:

5.2.1 部署流程

Gluten 的部署流程非常簡單,主要包括以下步驟:
依賴添加:
在 Spark 的配置文件中添加 Gluten 插件依賴
示例配置:

spark.jars.packages=org.apache.gluten:gluten-spark3.5_2.12:1.1.0
spark.plugins=org.apache.gluten.GlutenPlugin

注:需根據 Spark 版本選擇適配的 Gluten 包
后端引擎選擇:
通過配置選擇 Velox 或 ClickHouse 后端:
Velox后端

spark.gluten.sql.enable.native.engine=velox
spark.gluten.sql.velox.execution.mode=auto

ClickHouse后端

spark.gluten.sql.enable.native.engine=ch
spark.gluten.sql.ch.worker.id=ch01

內存配置優化:
調整 Native 與 JVM 內存比例(建議 Native 占 70%):

spark.memory.offHeap.size=20g
spark.gluten.memory.allocator.reserved=2g
spark.gluten.memory.task.ratio=0.7

5.2.2 使用難度

Apache Gluten 的使用難度顯著低于 Blaze,主要體現在:

  • 零代碼修改:用戶不需要修改一行代碼,只需要在 Spark 的配置文件中添加 Gluten 插件依賴,并根據需求選擇后端引擎即可
  • 自動轉換:Gluten 本質上是基于 Spark 插件接口開發的項目,自動將 Spark 的物理執行計劃轉換為 Substrait 格式,交由后端引擎執行
  • 自動回退:當遇到不支持的算子時,Gluten 會自動回退到 Spark 原生執行,保證任務執行的連續性

5.2.3 最佳實踐與優化建議

Gluten 的使用最佳實踐和優化建議包括:
性能調優配置:
啟用向量化執行加速:

spark.sql.inMemoryColumnarStorage.enabled=true
spark.sql.parquet.filterPushdown=true
spark.gluten.sql.columnar.batchscan.enabled=true

使用列式 Shuffle 減少序列化開銷:

spark.shuffle.manager=org.apache.spark.shuffle.sort.ColumnarShuffleManager
spark.gluten.sql.columnar.shuffle.prefer.direct=true

配置動態回退機制:

spark.gluten.sql.fallback.strategy=auto
spark.gluten.sql.fallback.threshold=3
  • 生產環境實踐:
    • 資源隔離:在 YARN/K8s 中為 Native 進程預留資源
    • 監控告警:集成 Prometheus 監控 Native 內存使用
    • 版本兼容性:根據 Spark 版本選擇合適的 Gluten 版本
  • 問題排查:
    • Native OOM 錯誤:檢查內存配置比例,增加 spark.gluten.memory.task.ratio 值
    • 算子回退頻繁:查看日志中的 Fallback occurred 警告,更新 Gluten 版本或改寫 SQL
    • 性能未達預期:確認是否啟用 Columnar Shuffle,檢查數據傾斜情況

5.3 部署與使用對比分析

將 Blaze 和 Apache Gluten 的部署與使用進行對比,可以發現以下特點:

  • 相同點:
    • 都需要在 Spark 配置中添加插件依賴
    • 都需要進行內存配置優化
    • 都提供了回退機制,確保任務執行的連續性
  • 差異點:
    • 部署復雜度:Blaze 的部署需要編譯 Native 庫和配置 Rust 環境,相對復雜;Gluten 的部署只需要添加依賴和配置參數,相對簡單
    • 代碼修改:Blaze 可能需要對某些算子進行特殊處理;Gluten 用戶不需要修改一行代碼,完全透明
    • 學習成本:Blaze 需要了解 Rust 和 DataFusion;Gluten 需要了解 Substrait 和 Velox/ClickHouse,但整體學習成本較低
    • 調試難度:Blaze 的調試可能涉及 JNI 和 Rust 代碼,較為復雜;Gluten 提供了更完善的監控和調試工具,調試相對容易
    • 配置靈活性:Blaze 提供了更多底層配置選項,靈活性更高;Gluten 的配置相對標準化,靈活性較低但更容易上手

六、應用場景與選型建議

6.1 適用場景分析

Blaze 和 Apache Gluten 各自適用于不同的應用場景:

6.1.1 Blaze 適用場景

Blaze 特別適合以下場景:

  • Rust 技術棧環境:
    • 團隊熟悉 Rust 語言,希望利用 Rust 的高性能和內存安全特性
    • 已經在使用 DataFusion 或計劃引入 Rust 技術棧的組織
  • 特定計算密集型任務:
    • 數據挖掘任務:Blaze 在常見數據挖掘任務(包括詞頻統計、PageRank、k-means、期望最大化和 k - 最近鄰)上比 Spark 快 10 倍
    • 復雜分析查詢:在 TPC-DS 測試中,單個查詢最高能達到 10 倍的性能提升
    • 內存敏感型應用:Blaze 在內存使用方面表現出色,特別是在 PageRank、KMeans 和 GMM 等算法上的內存消耗比 Spark 低 10 倍
  • 快手生態系統:
    • 已經在使用快手生態系統(如 Paimon)的用戶
    • 計劃與阿里云 Celeborn 集成的場景

6.1.2 Apache Gluten 適用場景

Apache Gluten 更適合以下場景:

  • Intel CPU 環境:
    • 運行在 Intel 架構服務器上的 Spark 集群
    • 希望充分利用 Intel CPU 特性(如 AVX 指令集)的場景
  • 多樣化計算需求:
    • 混合工作負載:同時處理批處理和流處理任務
    • 需要支持多種數據湖格式(如 DeltaLake、Iceberg、Hudi)的場景
    • 計劃擴展到流計算的組織
  • 生產穩定性要求高:
    • 大規模生產環境,美團等公司已在私有云環境中使用 Gluten 處理超過 10 萬個任務
    • 對任務穩定性和兼容性要求高的場景,Gluten 的自動回退機制保障了任務的連續性
  • 多語言生態系統:
    • 需要與多種語言和工具集成的大數據平臺
    • 計劃使用 Flink 等其他計算框架的組織

6.2 選型決策框架

在 Blaze 和 Apache Gluten 之間進行選擇,可以考慮以下決策框架:

6.2.1 技術棧適配度

技術棧適配度是首要考慮因素:

  • 開發語言匹配:
    • 如果團隊熟悉 Rust 語言,并且希望引入或已經在使用 Rust 技術棧,Blaze 可能更容易上手和進行二次開發
    • 如果團隊熟悉 C++ 和 Java 生態系統,Gluten 在技術理解和集成上可能更具優勢
  • 現有架構兼容性:
    • 如果現有架構中已經使用 DataFusion 或計劃引入 Rust 技術棧,Blaze 是更好的選擇
    • 如果現有架構基于 C++ 和 Java,并且希望利用 Intel CPU 的特性,Gluten 可能更適合

6.2.2 性能需求與優化目標

性能需求和優化目標是關鍵決策因素:

  • 計算密集型任務:
    • 對于數據挖掘任務,Blaze 在常見數據挖掘任務上比 Spark 快 10 倍
    • 對于 TPC-H 和 TPC-DS 等基準測試,Gluten 在 TPC-H 測試中比原生 Spark 快 3.3 倍,在 TPC-DS 測試中比原生 Spark 快 2.7 倍
  • 資源優化目標:
    • 如果主要目標是減少內存使用,Blaze 在內存使用方面表現更為出色
    • 如果主要目標是降低 CPU 使用率和提高能效比,Gluten 在 Intel 平臺上的表現更為突出

6.2.3 生態系統與集成需求

生態系統和集成需求也會影響選擇:

  • 數據格式支持:
    • 如果主要使用 Parquet 格式,Blaze 已經提供了良好的支持
    • 如果需要支持多種數據湖格式,Gluten 支持 DeltaLake、Iceberg 和 Hudi 等多種格式
  • Shuffle 服務集成:
    • 如果計劃使用 Celeborn 或 Uniffle 作為 Shuffle 服務,Blaze 已經提供了支持
    • 如果關注 Shuffle 優化和存算分離,Gluten 與 Apache Celeborn 的集成提供了更完善的解決方案

6.2.4 團隊資源與運維能力

團隊資源和運維能力是長期成功的關鍵:

  • 技術能力:
    • Blaze 需要團隊對 Rust 和 DataFusion 有一定的了解
    • Gluten 的部署和使用相對簡單,對團隊的技術要求較低
  • 運維資源:
    • Blaze 社區相對較小,技術支持可能有限
    • Gluten 作為 Apache 項目,社區活躍度高,技術支持更為充分

6.3 綜合選型建議

基于上述分析,我們提出以下綜合選型建議:

6.3.1 優先選擇 Blaze 的情況

建議優先選擇 Blaze 的情況包括:

  • 團隊技術棧:
    • 團隊熟悉 Rust 語言
    • 已經在使用或計劃引入 Rust 技術棧
    • 希望利用 Rust 的內存安全和高性能特性
  • 應用場景:
    • 主要處理數據挖掘任務和復雜分析查詢
    • 對內存使用效率有較高要求
    • 已經在使用或計劃使用快手生態系統組件(如 Paimon)
  • 部署環境:
    • 有能力和資源進行較為復雜的部署和維護
    • 需要高度定制化和靈活性的解決方案

6.3.2 優先選擇 Apache Gluten 的情況

建議優先選擇 Apache Gluten 的情況包括:

  • 團隊技術棧:
    • 團隊熟悉 Java 和 C++ 生態系統
    • 希望最小化學習成本和技術棧變更
    • 需要穩定的社區支持和完善的文檔
  • 應用場景:
    • 主要處理 ETL 和數據分析任務
    • 需要支持多種數據湖格式和流計算
    • 對任務穩定性和兼容性要求高
  • 部署環境:
    • 運行在 Intel CPU 平臺上
    • 需要簡單部署和維護
    • 大規模生產環境,對資源管理和監控有較高要求

6.3.3 混合使用策略

在某些情況下,混合使用 Blaze 和 Apache Gluten 可能是最佳選擇:

  • 任務特定優化:
    • 對計算密集型和內存敏感型任務使用 Blaze
    • 對通用 ETL 和數據分析任務使用 Gluten
  • 分階段遷移:
    • 先在部分任務上使用 Blaze 或 Gluten 進行測試和驗證
    • 根據測試結果逐步擴展到其他任務
  • 技術探索:
    • 同時評估兩種技術,根據團隊反饋和性能結果決定最終選擇
    • 關注兩種技術的發展動態,隨時調整技術路線

6.4 最終建議

綜合本研究的分析和結論,對考慮采用 Blaze 或 Apache Gluten 的企業提出以下最終建議:

  • 技術選型:
    • 根據團隊技術棧、應用場景和部署環境,選擇最適合的技術
    • 避免一刀切,可考慮混合使用策略,根據任務特點選擇最優技術
  • 實施路徑:
    • 采用分階段評估和實施策略,從試點到全面推廣
    • 建立明確的評估指標和成功標準
    • 確保有回滾計劃,降低實施風險
  • 長期規劃:
    • 將技術選擇與企業整體技術戰略對齊
    • 關注技術發展趨勢,保持技術靈活性
    • 投資團隊技能培養,提升技術能力

Blaze 和 Apache Gluten 代表了 Spark 性能優化的重要方向,通過將部分計算任務下推到 Native 引擎執行,能夠充分發揮現代硬件的性能潛力。隨著技術的不斷發展和社區的成熟,它們將在大數據處理領域發揮越來越重要的作用。企業應根據自身需求和條件,選擇最適合的技術,并積極參與技術演進,獲取最大價值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94889.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql 學習感悟 Day 1 Mysql架構

Mysql 學習感悟 Day 1簡介具體流程如下:Server 層連接器查詢緩存分析器優化器執行器存儲引擎層更新語句是怎么執行的例子日志redo logbinlogmysql事務的二段提交Mysql官網 mysql安裝教程 Navicat免費安裝親測有用 簡介 大體來說,MySQL 服務端可以分為…

企業為什么需要部署數據防泄露系統?

在數字化轉型的浪潮中,企業核心數據已成為商業競爭的“生命線”。然而,數據泄露事件頻發,不僅可能導致巨額經濟損失,更會嚴重損害企業信譽。據IBM《2023年數據泄露成本報告》顯示,全球平均數據泄露成本已攀升至445萬美…

CPU的MBR寄存器和MDR寄存器

在學習計算機組成原理,特別是學到CPU時,寄存器是必須了解的一些器件,比如說程序計數器(PC),指令寄存器(IR)等寄存器,同時,了解MDR和MBR這兩個寄存器也是必要的&#xff1…

QWidget和QML模式下阻止槽調用的方法總結

目錄 1.背景 2.QWidget中阻止槽函數調用的方法 2.1.臨時阻塞信號發射(blockSignals()) 2.2.斷開特定信號與槽的連接(disconnect()) 2.3.在槽函數內通過標志位過濾 2.4.重寫信號發射函數(針對自定義信號&#xff…

序列化,應用層自定義協議

我們發的是一個結構化的數據OS內部,協議全部都是傳遞結構體對象。可以直接發送二進制對象嗎?因為CS雙方都能認識這個結構體!!!可以直接發送二進制對象,但是不建議1. 客戶端和服務器說屬于不同的OS,不同的結構體,在不同…

序列化和反序列的學習

一:重談協議1 理解網絡協議,可以把它想象成網絡世界里的“交通規則”和“通用語言”。它是一套預先定義好的規則、標準和約定,使得不同設備、不同系統之間能夠順利地進行通信和數據交換。我們從TCP協議上面理解一下,首先TCP服務是…

計算機畢業設計 java 在線學習系統 基于 Java 的在線教育平臺 Java 開發的學習管理系統

計算機畢業設計 java 在線學習系統fk01a40i (配套有源碼 程序 mysql數據庫 論文)本套源碼可以先看具體功能演示視頻領取,文末有聯xi 可分享傳統學習模式受時空限制,互動性不足,難以滿足個性化學習需求。為打破限制&…

淘寶利用商品關鍵詞獲取商品信息指南

一、核心API接口選擇接口名稱功能描述適用場景taobao.items.search通過關鍵詞搜索商品,支持分頁、排序,返回商品列表(含標題、價格、銷量、圖片等)普通商品搜索、競品監控、數據分析taobao.tbk.item.get淘寶客API,返回…

紅黑樹下探玄機:C++ setmultiset 的幕后之旅

目錄 一、關聯式容器 二、鍵值對 三、set 四、set的構造 五、set的iterator 六、set的Operations 七、multiset 一、關聯式容器 序列式容器 : 在初階階段,我們已經接觸過STL中的部分容器,比如:vector、list、deque、forwa…

Spring : 事務管理

1. 基本概念 事務(Transaction)是一組不可分割的操作單元,這些操作要么全部成功執行,要么全部失敗回滾,不存在部分成功的情況。 事務具有ACID特性: 原子性(Atomicity):事…

C# 一個投資跟蹤程序的設計與實現:面向對象與設計模式的深度解析

在現代金融應用開發中,如何高效、靈活地構建投資跟蹤系統,是每一個金融軟件工程師必須面對的挑戰。本文將圍繞一個投資跟蹤程序的設計與實現過程,深入剖析其背后的設計理念、架構模式以及具體實現細節。我們將通過面向對象編程、設計模式&…

存儲的未來之戰:RustFS如何用ZK框架重構分布式協調?

本篇文章目錄 一、導火索:當數據洪峰撞上分布式協調的天花板 二、技術密碼:ZK框架的三大重構 2.1 一致性哈希環的量子級進化 2.2 動態負載均衡的"神經反射" 2.3 跨云數據同步的"時空折疊" 三、未來戰爭:2026年存儲…

模擬實現STL中的list容器

list前言一、list的節點結構設計二、迭代器設計三、list類的實現3.1 類的成員變量和類型定義3.2 構造函數與析構函數3.3 元素訪問與迭代器接口3.4 插入與刪除操作3.5 其他常用操作四、總結每文推薦前言 在C STL中,list是一個非常常用的容器,它基于雙向循…

Debug-039-el-date-picker組件手動輸入時間日期的問題處理

圖1-外輸入框圖2-內輸入框圖3問題描述:這兩天在迭代功能的時候,基本上碰到的問題都是出自這個“時間日期選擇框”,昨天的bug38也是解決這個組件。如上圖1和2所示,可以把圖1中的輸入框叫外輸入框,圖2中的輸入框叫內輸入…

docker-runc not installed on system

問題 Docker build時Dockerfile有RUN命令執行報錯shim error: docker-runc not installed on system,如下:解決方法 修改/etc/docker/daemon.json,添加正面內容 {"runtimes": {"docker-runc": {"path": "…

【秋招筆試】2025.08.27華為秋招研發崗真題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍在線刷題 bishipass.com 題目一:智能溫控系統監測 1??:使用滑動窗口技術維護有效溫度區間 2??:利用單調隊列高效維護窗口內的最大值和最小值 3??:動態調整窗口邊界,確保滿足溫…

Kafka 消費模型

文章目錄1. 一個消費者組中只有 1 個消費者2. 一個消費者組中有 2 個消費者3. 消費者數量 > 分區數量4. 多個消費者讀取同一個分區5. 消費者放入消費者組5.1 何時放入同一個消費者組5.2 何時放入不同的消費者組1. 一個消費者組中只有 1 個消費者 假設我們有一個 TopicT1&am…

【路由器】TP Link 路由器為何無法進入管理后臺

TL-WR710N是TP Link在很多年前發布的一個迷你型的便攜路由器,一插上還能用,直接reset打算重設密碼,結果根據它給的192.168.1.253根本打不開。# 解決方法ping一下192.168.1.253,無法連接。這個問題本質上是 你電腦/手機的 IP 和路由…

LightGBM(Light Gradient Boosting Machine,輕量級梯度提升機)梳理總結

LGB微軟團隊在 2017 年提出的梯度提升樹模型,核心定位是 “更高效的 XGBoost”—— 它在保持精度接近 XGBoost 的同時,通過“數據采樣優化”“特征壓縮”“樹生長策略改進”三大創新,將訓練速度提升 10-100 倍,內存消耗降低數倍&a…

畢業項目推薦:29-基于yolov8/yolov5/yolo11的光伏板檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全(可點擊查看,不定時更新中)概要一、整體資源介紹技術要點功能展示:功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出(xls格式…