標籤:

Spark SQL vs Impala, 同樣作為大數據SQL查詢引擎框架有什麼不同之處?

我在谷歌百度之後,網上大部分的博客描述在查詢性能方面Impala優於Spark SQL([原創]kudu vs parquet, impala vs spark Benchmark,New SQL Benchmarks: Apache Impala (incubating) Uniquely Delivers Analytic Database Performance - Cloudera Engineering Blog),有人能深入的從技術角度解釋兩種框架的不同之處嗎?謝謝!

比如使用場景,性能等等。


我們用Impala有2年多了,雖然也有很多坑,但是和 presto, pinot, spark sql等相比,確實是查詢性能最快的(注意,我單單說的是查詢性能)。Impala最大的問題在於catalogd是個單點,元數據多了後會遇到各種問題。

本質上,Impala是一個MPP engine,各節點不共享資源,每個executor可以獨自完成數據的讀取和計算,缺點在於怕stragglers,遇到後整個engine的性能下降到該straggler的能力,所謂木桶的短板,這也是為什麼MPP架構不適合異構的機器,要求各節點配置一樣。

Spark SQL應該還是算做Batching Processing, 中間計算結果需要落地到磁碟,所以查詢效率沒有MPP架構的引擎(如Impala)高。不過最近可以看出Spark的重點都在Spark SQL,因為它已經不僅僅是SQL了,而是新的 "spark core"。(詳見最後鏈接中Reynold Xin對此的解釋)

Spark SQL is not just about SQL. It turns out the primitives required for general data processing (eg ETL) are not that different from the relational operators, and that is what Spark SQL is. Spark SQL is the new Spark core with the Catalyst optimizer and the Tungsten execution engine, which powers the DataFrame, Dataset, and last but not least SQL.

關於這兩種架構更詳細的對比,可以參見Apache HAWQ: Next Step In Massively Parallel Processing

另外,Reynold Xin 在這篇blog的評論區和作者展開了深入的「討論」。(討論內容也和本問題直接相關)


技術上沒有深入了解,只說業務場景:

  • sparksql
    • 作為對batch processing的補充,提供基礎的sql能力(僅評1年多前的印象,沒留意近期進展)
    • 提供了procedural development支持
    • 技術棧相對清爽,受動手能力強的互聯網廠商青睞,可以自行改造
  • impala
    • 主是面向企業sql on hadoop市場
      • 更複雜sql的支持
      • 在這個場景下,性能上是超過sparksql的(見下)
      • +kudu,更大的野心:整個olap市場
    • 提供了周邊商業工具的完善支持
    • 技術棧非常複雜,所以有企業版這個概念。。。

關於性能評估,這裡有近期cloudera的一篇ppt(from Kornacker):

Tuning Impala: The top five performance optimizations for the best BI and SQL analytics on Hadoop - Strata + Hadoop World in San Jose 2017

由於是一家之言,對數據持保留意見,但是裡邊介紹tuning tips對類olap產品的啟發很大。


推薦閱讀:

Spark源碼剖析(五):Task提交流程
Spark性能優化之道——解決Spark數據傾斜(Data Skew)的N種姿勢
《神聖的靈光 Spark of the Divine》 三十二
python操作hive實戰

TAG:cloudera | Spark |