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