掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
使用SQL 引擎一詞是有點隨意的。例如Hive 不是一個引擎,它的框架使用MapReduce、TeZ 或者Spark 引擎去執(zhí)行查詢,而且它并不運行SQL,而是HiveQL,一種類似SQL 的語言,非常接近SQL。“SQL-in-Hadoop” 也不適用,雖然Hive 和Impala 主要使用Hadoop,但是Spark、Drill、HAWQ 和Presto 還可以和各種其他的數(shù)據(jù)存儲系統(tǒng)配合使用。

不像關(guān)系型數(shù)據(jù)庫,SQL 引擎獨立于數(shù)據(jù)存儲系統(tǒng)。相對而言,關(guān)系型數(shù)據(jù)庫將查詢引擎和存儲綁定到一個單獨的緊耦合系統(tǒng)中,這允許某些類型的優(yōu)化。另一方面,拆分它們,提供了更大的靈活性,盡管存在潛在的性能損失。
下面的圖1展示了主要的SQL 引擎的流行程度,數(shù)據(jù)由奧地利咨詢公司Solid IT 維護的DB-Engines 提供。DB-Engines 每月為超過200個數(shù)據(jù)庫系統(tǒng)計算流行得分。得分反應(yīng)了搜索引擎的查詢,在線討論的提及,提供的工作,專業(yè)資歷的提及,以及tweets。
Apache Hive:41.65(4月數(shù)據(jù)) -2.97(對比3月) -7.43(對比2016年)
Apache Impala:11.23 +0.86 +2.94
Apache SparkSQL:7.92 +0.60 +2.93
Apache Drill:2.93 -0.01 +1.09
Apache HAWQ:0.89 +0.06 +0.20
Presto:0.66 +0.12 +0.32
雖然Impala、Spark SQL、Drill、Hawq 和Presto 一直在運行性能、并發(fā)量和吞吐量上擊敗Hive,但是Hive 仍然是最流行的(至少根據(jù)DB-Engines 的標(biāo)準(zhǔn))。原因有3個:
Hive 是Hadoop 的默認(rèn)SQL 選項,每個版本都支持。而其他的要求特定的供應(yīng)商和合適的用戶; Hive 已經(jīng)在減少和其他引擎的性能差距。大多數(shù)Hive 的替代者在2012年推出,分析師等待Hive 查詢的完成等到要自殺。然而當(dāng)Impala、Spark、Drill 等大步發(fā)展的時候,Hive只是一直跟著,慢慢改進?,F(xiàn)在,雖然Hive 不是最快的選擇,但是它比五年前要好得多;
雖然前沿的速度很酷,但是大多數(shù)機構(gòu)都知道世界并沒有盡頭。即使一個年輕的市場經(jīng)理需要等待10秒鐘來查明上周二Duxbury 餐廳的雞翅膀的銷量是否超過了牛肉漢堡。
從DB-Engins中可以看出,相對于領(lǐng)先的商業(yè)數(shù)據(jù)倉庫應(yīng)用,用戶對頂尖的SQL引擎更感興趣。對于開源項目來說,最佳的健康度量是它的活躍開發(fā)者社區(qū)的大小。如下圖所示,Hive和Presto有最大的貢獻(xiàn)者基礎(chǔ)。(Spark SQL的數(shù)據(jù)暫缺)
在2016年,Cloudera、Hortonworks、Kognitio 和Teradata 陷入了Tony Baer 總結(jié)的基準(zhǔn)測試之戰(zhàn),令人震驚的是,供應(yīng)商偏愛的SQL 引擎在每一個研究中都擊敗了其他選擇,這帶來一個問題:基準(zhǔn)測試還有意義嗎?
AtScale 一年兩次的基準(zhǔn)測試并不是毫無根據(jù)的。作為一個BI 初創(chuàng)公司,AtScale 銷售銜接BI 前端和SQL 后端的軟件。公司的軟件是引擎中立的,它嘗試盡可能多的兼容,其在BI 領(lǐng)域的廣泛經(jīng)驗讓這些測試有了實際的意義。
AtScale 最近的關(guān)鍵發(fā)現(xiàn),包括了Hive、Impala、Spark SQL 和Presto:
4個引擎都成功運行了AtScale 的BI 基準(zhǔn)查詢;
取決于數(shù)據(jù)量、查詢復(fù)雜度和并發(fā)用戶數(shù),每個引擎都有自己的性能優(yōu)勢:
Impala 和Spark SQL 在小數(shù)據(jù)量的查詢上擊敗了其他人;
Impala 和Spark SQL 在大數(shù)據(jù)量的復(fù)雜join 上擊敗了其他人;
Impala 和Presto 在并發(fā)測試上表現(xiàn)的更好。
對比6個月之前的基準(zhǔn)測試,所有的引擎都有了2-4倍的性能提升。
Alex Woodie 報告了測試結(jié)果,Andrew Oliver 對其進行分析。
讓我們來深入了解這些項目。
Apache Hive 是Hadoop 生態(tài)系統(tǒng)中的第一個SQL 框架。Facebook 的工程師在2007年介紹了Hive,并在2008年將代碼捐獻(xiàn)給Apache 軟件基金會。2010年9月,Hive 畢業(yè)成為Apache 頂級項目。Hadoop 生態(tài)系統(tǒng)中的每個主要參與者都發(fā)布和支持Hive,包括Cloudera、MapR、Hortonworks 和IBM。Amazon Web Services 在Elastic MapReduce(EMR)中提供了Hive 的修改版作為云服務(wù)。
早期發(fā)布的Hive 使用MapReduce 運行查詢。復(fù)雜查詢需要多次傳遞數(shù)據(jù),這會降低性能。所以Hive 不適合交互式分析。由Hortonworks 領(lǐng)導(dǎo)的Stinger 明顯的提高了Hive 的性能,尤其是通過使用Apache Tez,一個精簡MapReduce 代碼的應(yīng)用框架。Tez 和ORCfile,一種新的存儲格式,對Hive 的查詢產(chǎn)生了明顯的提速。
Cloudera 實驗室?guī)ьI(lǐng)一個并行項目重新設(shè)計Hive 的后端,使其運行在Apache Spark 上。經(jīng)過長期測試后,Cloudera 在2016年初發(fā)布了Hive-on-Spark 的正式版本。
在2016年,Hive 有100多人的貢獻(xiàn)者。該團隊在2月份發(fā)布了Hive 2.0,并在6月份發(fā)布了Hive 2.1。Hive 2.0 的改進包括了對Hive-on-Spark 的多個改進,以及性能、可用性、可支持性和穩(wěn)定性增強。Hive 2.1 包括了Hive LLAP(”Live Long and Process“),它結(jié)合持久化的查詢服務(wù)器和優(yōu)化后的內(nèi)存緩存,來實現(xiàn)高性能。該團隊聲稱提高了25倍。
9月,Hivemall 項目進入了Apache 孵化器,正如我在我的機器學(xué)習(xí)年度總結(jié)的第二部分中指出的。Hivemall 最初由Treasure Data 開發(fā)并捐獻(xiàn)給Apache 軟件基金會,它是一個可擴展的機器學(xué)習(xí)庫,通過一系列的Hive UDF 來實現(xiàn),設(shè)計用于在Hive、Pig 和Spark SQL 上運行MapReduce。該團隊計劃在2017年第一季度發(fā)布了第一個版本。
2012年,Cloudera 推出了Impala,一個開源的MPP SQL 引擎,作為Hive 的高性能替代品。Impala 使用HDFS 和HBase,并利用了Hive 元數(shù)據(jù)。但是,它繞開了使用MapReduce 運行查詢。
Cloudera 的首席戰(zhàn)略官Mike Olson 在2013年底說到Hive 的架構(gòu)是有根本缺陷的。在他看來,開發(fā)者只能用一種全新的方式來實現(xiàn)高性能SQL,例如Impala。2014年的1月、5月和9月,Cloudera 發(fā)布了一系列的基準(zhǔn)測試。在這些測試中,Impala 展示了其在查詢運行的逐步改進,并且顯著優(yōu)于基于Tez 的Hive、Spark SQL 和Presto。除了運行快速,Impala 在并發(fā)行、吞吐量和可擴展性上也表現(xiàn)優(yōu)秀。2015年,Cloudera 將Impala 捐獻(xiàn)給Apache 軟件基金會,進入了Apache 孵化計劃。Cloudera、MapR、Oracle 和Amazon Web Services 分發(fā)Impala,Cloudera、MapR 和Oracle 提供了商業(yè)構(gòu)建和安裝支持。
2016年,Impala 在Apache 孵化器中取得了穩(wěn)步發(fā)展。該團隊清理了代碼,將其遷移到Apache 基礎(chǔ)架構(gòu),并在10月份發(fā)布了第一個Apache 版本2.7.0。新版本包括了性能提升和可擴展性改進,以及一些其他小的增強。
9月,Cloudera 發(fā)布了一項研究結(jié)果,該研究比較了Impala 和Amazon Web Services 的Redshift 列存儲數(shù)據(jù)庫。報告讀起來很有意思,雖然主題一貫的需要注意供應(yīng)商的基準(zhǔn)測試。
Spark SQL 是Spark 用于結(jié)構(gòu)化數(shù)據(jù)處理的組件。Apache Spark 團隊 在2014年發(fā)布了Spark SQL,并吸收了一個叫Shark 的早期的Hive-on-Spark 項目。它迅速成為最廣泛使用的Spark 模塊。
Spark SQL 用戶可以運行SQL 查詢,從Hive 中讀取數(shù)據(jù),或者使用它來創(chuàng)建Spark Dataset和DataFrame(Dataset 是分布式的數(shù)據(jù)集合,DataFrame 是統(tǒng)一命名的Dataset 列)。Spark SQL 的接口向Spark 提供了數(shù)據(jù)結(jié)構(gòu)和執(zhí)行操作的信息,Spark 的Catalyst 優(yōu)化器使用這些信息來構(gòu)造一個高效的查詢。
2015年,Spark 的機器學(xué)習(xí)開發(fā)人員引入了ML API,一個利用Spark DataFrame 代替低級別Spark RDD API 的包。這種方法被證明是有吸引力和富有成果的;2016年,隨著2.0 的發(fā)布,Spark 團隊將基于RDD 的API改為維護模式。DataFrame API現(xiàn)在是Spark 機器學(xué)習(xí)的主要接口。
此外,在2016年,該團隊還在Spark 2.1.0的Alpha 版本中發(fā)布了結(jié)構(gòu)化的流式處理。結(jié)構(gòu)化的流式處理是構(gòu)建在Spark SQL 上的一個流處理引擎。用戶可以像對待靜態(tài)源一樣,用同樣的方式查詢流式數(shù)據(jù)源,并且可以在單個查詢中組合流式和靜態(tài)源。Spark SQL 持續(xù)運行查詢,并且在流式數(shù)據(jù)到達(dá)的時候更新結(jié)果。結(jié)構(gòu)化的流通過檢查點和預(yù)寫日志來提供一次性的容錯保障。
2012年,由Hadoop 分銷商的領(lǐng)導(dǎo)者之一MapR 領(lǐng)導(dǎo)的一個團隊,提出構(gòu)建一個Google Dremel 的開源版本,一個交互式的分布式熱點分析系統(tǒng)。他們將其命名為Apache Drill。Drill 在Apache 孵化器中被冷落了兩年多,最終在2014年底畢業(yè)。該團隊在2015年發(fā)布了1.0。
MapR 分發(fā)和支持Apache Drill。
2016年,超過50個人對Drill 做出了貢獻(xiàn)。該團隊在2016年發(fā)布了5個小版本,關(guān)鍵的增強功能包括:
Web 認(rèn)證
支持Apache Kudu 列數(shù)據(jù)庫
支持HBase 1.x
動態(tài)UDF 支持
2015年,兩位關(guān)鍵的Drill 貢獻(xiàn)者離開了MapR,并啟動了Dremio,該項目尚未發(fā)布。
Pivotal 軟件在2012年推出了一款商業(yè)許可的高性能SQL 引擎HAWQ,并在嘗試市場營銷時取得了小小的成功。改變戰(zhàn)略后,Pivotal 在2015年6月將項目捐獻(xiàn)給了Apache,并于2015年9月進入了Apache 孵化器程序。
15個月之后,HAWQ 仍然待在孵化器中。2016年12月,該團隊發(fā)布了HAWQ 2.0.0.0,加入了一些錯誤修復(fù)。我猜它會在2017年畢業(yè)。
對HAWQ 喜愛的一個小點是它支持Apache MADlib,一個同樣在孵化器中的SQL 機器學(xué)習(xí)項目。HAWQ 和MADlib 的組合,應(yīng)該是對購買了Greenplum 并且想知道發(fā)生了什么的人們的一個很好的安慰。
Facebook工程師在2012年發(fā)起了Presto 項目,作為Hive 的一個快速交互的取代。在2013年推出時,成功的支持了超過1000個Facebook 用戶和每天超過30000個PB級數(shù)據(jù)的查詢。2013年Facebook開源了Presto。
Presto 支持多種數(shù)據(jù)源的ANSI SQL 查詢,包括Hive、Cassandra、關(guān)系型數(shù)據(jù)庫和專有文件系統(tǒng)(例如Amazon Web Service 的S3)。Presto 的查詢可以聯(lián)合多個數(shù)據(jù)源。用戶可以通過C、Java、Node.js、PHP、Python、R和Ruby 來提交查詢。
Airpal 是Airbnb 開發(fā)的一個基于web 的查詢工具,讓用戶可以通過瀏覽器來提交查詢到Presto。Qubole 位Presto 提供了管理服務(wù)。AWS 在EMR 上提供Presto 服務(wù)。
2015年6月,Teradata 宣布計劃開發(fā)和支持該項目。根據(jù)宣布的三階段計劃,Teredata 提出將Presto 集成導(dǎo)Hadoop 生態(tài)系統(tǒng)中,能夠在YARN 中進行操作,并且通過ODBC 和JDBC 增強連接性。Teredata 提供了自己的Presto 發(fā)行版,附帶一份數(shù)據(jù)表。2016年6月,Teradata 宣布了Information Builders、Looker、Qlik、Tableau 和ZoomData 的鑒定結(jié)果,以及正在進行中的MicroStrategy 和Microsoft Power BI。
Presto 是一個非常活躍的項目,有一個巨大的和充滿活力的貢獻(xiàn)者社區(qū)。該團隊發(fā)布的速度比Miki Sudo 吃熱狗的速度還要快–我統(tǒng)計了下,2016年共發(fā)布了42個版本。Teradata 并沒有打算總結(jié)有什么新的東西,我也不打算在42個發(fā)行說明里去篩選,所以就讓我們說它更好吧。
這里還有5個其他的Apache生態(tài)系統(tǒng)的SQL混合項目。
Apache Calcite 是一個開源的數(shù)據(jù)庫構(gòu)建框架。它包括:
SQL 解析器、驗證器和JDBC 驅(qū)動 查詢優(yōu)化工具,包括關(guān)系代數(shù)API,基于規(guī)則的計劃器和基于成本的查詢優(yōu)化器 Apache Hive 使用Calcite 進行基于成本的查詢優(yōu)化,而Apache Drill 和Apache Kylin 使用SQL 解析器。
Calcite 團隊在2016年推出了5個版本包括bug 修復(fù)和用于Cassandra、Druid 和Elasticsearch 的新適配器。
Apache Kylin是一個具有SQL接口的OLAP引擎。由eBay 開發(fā)并捐獻(xiàn)給Apache,Kylin 在2015年畢業(yè)成為頂級項目。
2016年成立的創(chuàng)業(yè)公司Kyligence 提供商業(yè)支持和一個叫做KAP 的數(shù)據(jù)倉庫產(chǎn)品,雖然在Crunchbase 上沒有列出它的資金情況,有消息來源稱它有一個強大的背景,并且在上海有個大辦公室。
Apache Phoenix 是一個運行在HBase 上的SQL 框架,繞過了MapReduce。Salesforce 開發(fā)了該軟件并在2013年捐獻(xiàn)給了Apache。2014年5月項目畢業(yè)成為頂級項目。Hortonworks 的Hortonworks 數(shù)據(jù)平臺中包含該項目。自從領(lǐng)先的SQL 引擎都適配HBase 之后,我不清楚為什么我們還需要Phoenix。
Apache Tajo 是Gruter 在2011年推出的一個快速SQL 數(shù)據(jù)倉庫框架,一個大數(shù)據(jù)基礎(chǔ)設(shè)施公司,并在2013年捐獻(xiàn)給Apache。2014年Tajo 畢業(yè)成為頂級項目。在作為Gruter 主要市場的韓國之外,該項目很少吸引到預(yù)期用戶和貢獻(xiàn)者的興趣。除了Gartner 的Nick Heudecker 曾提過,該項目不在任何人的工作臺上。
Apache Trafodion 是另一個SQL-on-HBase 項目,由HP 實驗室構(gòu)思,它告訴你幾乎所有你需要知道的。2014年6月HP 發(fā)布Trafodion,一個月之后,Apache Phoenix 畢業(yè)投產(chǎn)。6個月之后,HP 的高管們認(rèn)為相對于另一款SQL-on-HBase 引擎,它的商業(yè)潛力有限,所以他們將項目捐獻(xiàn)給了Apache,項目于2015年5月進入孵化器。
如果孵化結(jié)束,Trafodion 承諾成為一個事務(wù)數(shù)據(jù)庫。不幸的是,這個領(lǐng)域有大量的選擇,而開發(fā)團隊唯一的競爭優(yōu)勢似乎是“它是開源的,所以它很便宜”。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流