測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?

現在大數據組件非常多,眾說不一,那麼每個企業在不同的使用場景裡究竟應該使用哪個引擎呢?易觀Spark實戰營團隊選取了Hive、SparkSQL、Presto、Impala、HAWQ、ClickHouse、Greenplum七個大數據查詢引擎,在原生推薦配置情況下,在不同場景下做一次橫向對比,出品了一份開源OLAP引擎測評報告。


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


作者 | 郭煒

責編 | 伍杏玲

本文經授權轉載自Analysys易觀(ID:enfodesk)



測試方案


測試整體方案

本次測試針對現有Olap的7大Sql引擎Hadoop(2.7)、Hive(2.1)、HAWQ(3.1.2.0)、Presto(0.211)、Impala(2.6.0)、SparkSQL(2.2.0)、ClickHouse(18.1.0-1.El7)、Greenplum(5.7.0) 基礎性能測試。我們採用多表關聯和單大表性能分別對比不同組件在查詢性能、系統負載等方面的情況,測試方案如下:

1. 多表關聯採用TPC-DS基準測試工具生成相應測試語句和數據進行測試。

2. 單大表測試同樣選用Tpc-Ds基準測試工具生成的最大數據量的表,並採用我們選用的一些常規性聚合語句進行測試。

TPC-DS測試與單表測試方案及數據準備

TPC-DS採用星型、雪花型等多維數據模式。它包含7張事實表,17張維度表平均每張表含有18列。其工作負載包含99個SQL查詢,覆蓋SQL99和2003的核心部分以及OLAP。這個測試集包含對大數據集的統計、報表生成、聯機查詢、數據挖掘等複雜應用,測試用的數據和值是有傾斜的,與真實數據一致。可以說TPC-DS是與真實場景非常接近的一個測試集,也是難度較大的一個測試集。

TPC-DS的這個特點跟大數據的分析挖掘應用非常類似。Hadoop等大數據分析技術也是對海量數據進行大規模的數據分析和深度挖掘,也包含交互式聯機查詢和統計報表類應用,同時大數據的數據質量也較低,數據分佈是真實而不均勻的。因此TPC-DS成為客觀衡量多個不同Hadoop版本以及SQL on Hadoop技術的最佳測試集。

本次測試採用TPC-DS提供的dsdgen命令工具生成指定量級的測試數據,我們指定數據量級為100G。

生成的各個表的數據量如下:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


通過使用dsqgen命令根據TPC-DS提供的模板生成不同類型的SQL語句,TPC-DS默認支持以下模板:DB2.tpl、Netezza.tpl、Oracle.tpl、SQLServer.tpl。我們通過命令生成SQLServer.tpl模板的SQL語句,分別對其進行細微的修改使其符合不同的OLAP引擎支持的語法規則。

對於多表關聯測試,我們從中選取了15條有代表性的SQL語句,幾乎所有的測試案例都有很高的IO負載和CPU計算需求,涵蓋了幾乎所有的業務場景。

對於單大表測試,我們選擇TPC-DS生成的測試數據集中數據量最大的表Store_Sales,並選用了9條使用頻率高的常規性聚合sql語句進行測試。

環境準備

本次測試方案的硬件環境使用三臺物理機,操作系統為CentOS7,基礎配置信息如下表:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


本次測試各組件搭建的版本信息如下:Hadoop(2.7)、Hive(2.1)、HAWQ(3.1.2.0)、Presto(0.211)、Impala(2.6.0)、SparkSQL(2.2.0)、ClickHouse(18.1.0-1.el7)、Greenplum(5.7.0),所有組件都採用分佈式搭建於三臺服務器,並配置每臺服務器上查詢最大使用內存20G,CPU8線。

各個OLAP引擎通過各自的方式創建表結構,導入數據。Hive使用ORC格式的內部表;Impala使用Hive上的Parquet格式數據;Presto使用Hive上的ORC格式數據;HAWQ建立內部表使用默認Txt格式;ClickHouse使用Log表引擎分佈式建表。



測試組件介紹


SparkSQL

SparkSQL是Spark處理結構化數據的程序模塊。它將SQL查詢與Spark程序無縫集成,可以將結構化數據作為 Spark 的 RDD 進行查詢。RDD 的全稱為 Resilient Distributed Datasets,即彈性分佈式數據集,是 Spark 基本的數據結構。Spark 使用 RDD 作為分佈式程序的工作集合,提供一種分佈式共享內存的受限形式。RDD 是隻讀的,對其只能進行創建、轉化和求值等操作。SparkSQL作為Spark生態的一員繼續發展,而不再受限於Hive,只是兼容Hive。我們利用hive作為數據源,Spark作為計算引擎,通過SQL解析引擎,實現基於Hive數據源,Spark作為計算引擎的SQL測試方案。

Presto

Presto是一個分佈式SQL查詢引擎,它被設計為用來專門進行高速、實時的數據分析。它支持標準的ANSI SQL,包括複雜查詢、聚合(Aggregation)、連接(Join)和窗口函數(Window Functions)。作為Hive和Pig(Hive和Pig都是通過MapReduce的管道流來完成HDFS數據的查詢)的替代者,Presto本身並不存儲數據,但是可以接入多種數據源,並且支持跨數據源的級聯查詢。Presto是一個OLAP的工具,擅長對海量數據進行復雜的分析;但是對於OLTP場景,並不是Presto所擅長,所以不要把Presto當做數據庫來使用。

Impala

Impala 是 Cloudera 在受到 Google 的 Dremel 啟發下開發的實時交互SQL大數據查詢工具,它擁有和Hadoop一樣的可擴展性、它提供了類SQL(類Hsql)語法,在多用戶場景下也能擁有較高的響應速度和吞吐量。它是由Java和C++實現的,Java提供的查詢交互的接口和實現,C++實現了查詢引擎部分,除此之外,Impala還能夠共享Hive Metastore,甚至可以直接使用Hive的JDBC jar和beeline等直接對Impala進行查詢、支持豐富的數據存儲格式(Parquet、Avro等)。

此外,Impala 沒有再使用緩慢的 Hive+MapReduce 批處理,而是通過使用與商用並行關係數據庫中類似的分佈式查詢引擎(由 Query Planner、Query Coordinator 和 Query Exec Engine 三部分組成),可以直接從 HDFS 或 HBase 中用 SELECT、JOIN 和統計函數查詢數據,從而大大降低了延遲。

HAWQ

HAWQ 是一個 Hadoop 上的 SQL 引擎,是以 Greenplum Database 為代碼基礎逐漸發展起來的。HAWQ 採用 MPP 架構,改進了針對 Hadoop 的基於成本的查詢優化器。除了能高效處理本身的內部數據,還可通過 PXF 訪問 HDFS、Hive、HBase、JSON 等外部數據源。HAWQ全面兼容 SQL 標準,能編寫 SQL UDF,還可用 SQL 完成簡單的數據挖掘和機器學習。無論是功能特性,還是性能表現,HAWQ 都比較適用於構建 Hadoop 分析型數據倉庫應用。

ClickHouse

ClickHouse由俄羅斯Yandex公司開發。專為在線數據分析而設計。Yandex是俄羅斯搜索引擎公司。官方提供的文檔表名,ClickHouse日處理記錄數”十億級”。

特性:

  • 採用列式存儲
  • 數據壓縮
  • 基於磁盤的存儲,大部分列式存儲數據庫為了追求速度,會將數據直接寫入內存,按時內存的空間往往很小
  • CPU 利用率高,在計算時會使用機器上的所有 CPU 資源
  • 支持分片,並且同一個計算任務會在不同分片上並行執行,計算完成後會將結果彙總
  • 支持SQL,SQL 幾乎成了大數據的標準工具,使用門檻較低
  • 支持聯表查詢
  • 支持實時更新
  • 自動多副本同步
  • 支持索引
  • 分佈式存儲查詢

Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供完整的sql查詢功能,可以將SQL語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

Hive是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。

Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的用戶查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 Mapper 和 Reducer 來處理內建的 Mapper 和 Reducer 無法完成的複雜的分析工作。

Greenplum

Greenplum是一個開源的大規模並行數據分析引擎。藉助MPP架構,在大型數據集上執行復雜SQL分析的速度比很多解決方案都要快。

  • GPDB完全支持ANSI SQL 2008標準和SQL OLAP 2003 擴展。
  • 從應用編程接口上講,它支持ODBC和JDBC。
  • 完善的標準支持使得系統開發、維護和管理都大為方便。
  • 支持分佈式事務,支持ACID。
  • 保證數據的強一致性。
  • 做為分佈式數據庫,擁有良好的線性擴展能力。
  • GPDB有完善的生態系統,可以與很多企業級產品集成,譬如SAS、Cognos、Informatic、Tableau等。
  • 也可以很多種開源軟件集成,譬如Pentaho、Talend 等。




性能測試分析


數據壓縮

數據壓縮方面,SparkSQL、Impala、Presto均採用的是Hive元數據,Hive數據100G上傳之後顯示為96.3G(.dat數據格式),壓縮比0.963;HAWQ壓縮後數據大小為68.2G(.dat格式),壓縮比:0.682;ClickHouse採用自己默認格式42G;Greenplum未使用壓縮,數據存儲大小為98G。

性能測試

本節通過查詢語句對比SparkSQL、Presto、Impala、HAWQ、ClickHouse、Hive、Greenplum七種組件的查詢性能,測試結果均採用連續三次查詢結果的平均值,通過圖表展示對比結果。

性能分析部分我們分為兩部分,第一部分是多表關聯查詢對比測試,第二部分是單大表查詢對比測試。

多表關聯查詢對比測試

以下是多表關聯測試結果,數據如下:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


通過我們選取的15條SQL語句查詢測試,從表中可以看出,Presto、Impala和HAWQ查詢時間快於SparkSQL和ClickHouse,性能約是SparkSQL的2-3倍,其中尤其以Presto和Impala性能要好一些。

Greenplum在多表查詢上也有不錯的表現;ClickHouse對於多表Join效果相比較於Presto、Impala、HAWQ不是很好,並且很多複雜語法支持的不夠好,可見並不是為關聯分析而設置;而Hive無疑是所有組件中耗時最多的,其中部分語句查詢時間超出1h的總時間按1h計算。

下面是通過圖形展示來更加直觀比較各組件性能。由於Hive與其他相差太大,在圖中不作比較。


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


單表查詢對比測試

以下是9條單表測試語句對六種組件進行測試,測試結果圖表分析如下:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


從結果中我們發現,對於單表測試ClickHouse要比其餘幾種組件查詢速度表現突出,測試性能約是其餘四種的3-6倍。而Presto相比於HAWQ、Impala、SparkSQL、GreenPlum在單表操作方面性能也稍好些。

下面通過圖來直觀比較:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?



測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


從圖像上更加清楚地顯示出五種組件在單表測試方面性能的差距,ClickHouse在性能方面體現出了足夠的優勢,在單大表查詢方面比其餘組件性能都要好;Impala和Presto相比較,在sql_01-sql_05這5條語句是簡單的一些求和求平均的單表操作方面,Presto的性能要比Impala好很多,而sql_06-sql_09一些複雜點的多個列的單表操作,Impala的性能要比Presto好一些,這也反映出Presto更加適合一些簡單的數據量大的聚合操作,而Impala適合一些複雜的聚合操作。

最後我們發現HAWQ、Greenplum在單表聚合操作方面性能不如其餘四種組件,測試時間要大大超過它們,當然也不排除測試環境的影響,但是測試結果表明,HAWQ、Greenplum不適合單表的複雜聚合操作,更適合多表的聚合操作。

性能測試結果分析

從上面的分析結果可以看出,Presto、Impala以及HAWQ在多表查詢方面體現出了優勢,雖說Presto和Impala在多表查詢方面的性能差別不大,但是在查詢過程中卻發現Impala的一些侷限性,並儘量避開這些侷限問題進行測試。Impala不支持的地方,例如:不支持update、delete操作,不支持Date數據類型,不支持ORC文件格式等等,而Presto則基本沒有這些侷限問題(本次測試中基本沒有發現)。

在單表測試方面ClickHouse體現出了比其餘組件的優勢,性能比其他組件要好一大截,而Presto相比於HAWQ和impala以及SparkSQL在單大表聚合操作方面的表現也相對優秀。



各組件綜合分析比較


通過以上圖表查詢性能分析以及我們查找相關資料對各組件總結如下:

  1. SparkSQL是Hadoop中另一個著名的SQL引擎,它以Spark作為底層計算框架,Spark使用RDD作為分佈式程序的工作集合,它提供一種分佈式共享內存的受限形式。
  2. 在分佈式共享內存系統中,應用可以向全局地址空間的任意位置進行讀寫操作,而RDD是隻讀的,對其只能進行創建、轉化和求值等操作。這種內存操作大大提高了計算速度。
  3. SparkSQL的性能相對其他的組件要差一些,多表單表查詢性能都不突出。
  4. Impala官方宣傳其計算速度是一大優點,在實際測試中我們也發現它的多表查詢性能和presto差不多,但是單表查詢方面卻不如presto好。
  5. 而且Impala有很多不支持的地方,例如:不支持update、delete操作,不支持Date數據類型,不支持ORC文件格式等等,所以我們查詢時採用Parquet格式進行查詢,而且Impala在查詢時佔用的內存很大。
  6. Presto綜合性能比起來要比其餘組件好一些,無論是查詢性能還是支持的數據源和數據格式方面都要突出一些,在單表查詢時性能靠前,多表查詢方面性能也很突出。
  7. 由於Presto是完全基於內存的並行計算,所以Presto在查詢時佔用的內存也不少,但是發現要比Impala少一些,比如多表Join需要很大的內存,Impala佔用的內存比Presto要多。
  8. HAWQ 吸收了先進的基於成本的 SQL 查詢優化器,自動生成執行計劃,可優化使用Hadoop 集群資源。
  9. HAWQ 採用 Dynamic Pipelining 技術解決這一關鍵問題。Dynamic Pipelining 是一種並行數據流框架,利用線性可擴展加速Hadoop查詢,數據直接存儲在HDFS上,並且其SQL查詢優化器已經為基於HDFS的文件系統性能特徵進行過細緻的優化。
  10. 但是我們發現HAWQ在多表查詢時比Presto、Impala差一些;而且不適合單表的複雜聚合操作,單表測試性能方面要比其餘四種組件差很多,HAWQ環境搭建也遇到了諸多問題。
  11. ClickHouse 作為目前所有開源MPP計算框架中計算速度最快的,它在做多列的表,同時行數很多的表的查詢時,性能是很讓人興奮的,但是在做多表的Join時,它的性能是不如單寬表查詢的。
  12. 性能測試結果表明ClickHouse在單表查詢方面表現出很大的性能優勢,但是在多表查詢中性能卻比較差,不如Presto和Impala、HAWQ的效果好。
  13. Greenplum作為關係型數據庫產品,它的特點主要就是查詢速度快,數據裝載速度快,批量DML處理快。
  14. 而且性能可以隨著硬件的添加,呈線性增加,擁有非常良好的可擴展性。因此,它主要適用於面向分析的應用。
  15. 比如構建企業級ODS/EDW,或者數據集市等,Greenplum都是不錯的選擇。
  16. 此外我們還對Flink進行了調研發現,Flink 核心是個流式的計算引擎,通過流來模擬批處理,Flink SQL還處於早期開發階段,未來社區計劃通過提供基於REST的SQL客戶端,目前SQL客戶端不能直接訪問Hive,通過YAML file文件定義外部數據源,可以連接文件系統和Kafka,目前短時間我們的SQL測試不太好模擬。所以沒有對Flink進行測試分析。

我們通過測試以及以上的相關調研編寫了各組件各個方面的綜合對比分析表,這裡採用5分為滿分來比較,如下表:


測評Hive、SparkSQL、Presto 等七個大數據查詢引擎,最快的是?


作者簡介:易觀Spark實戰營是易觀大數據技術團隊組織的針對大數據初學者的實戰訓練營。

【END】

相關推薦

推薦中...