主流開源SQL(on Hadoop)總結,不斷改進的Hive始終遙遙領先

NO IMAGE

主流開源SQL(on Hadoop)總結,不斷改進的Hive始終遙遙領先

 

 

本文涵蓋了6個開源領導者:Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto,還加上Calcite、Kylin、Phoenix、Tajo 和Trafodion。以及2個商業化選擇Oracle Big Data SQL 和IBM Big SQL,IBM 尚未將後者更名為“Watson SQL”。

(有讀者問:Druid 呢?我的回答是:檢查後,我同意Druid 屬於這一類別。)

使用SQL 引擎一詞是有點隨意的。例如Hive 不是一個引擎,它的框架使用MapReduce、TeZ 或者Spark 引擎去執行查詢,而且它並不執行SQL,而是HiveQL,一種類似SQL 的語言,非常接近SQL。“SQL-in-Hadoop” 也不適用,雖然Hive 和Impala 主要使用Hadoop,但是Spark、Drill、HAWQ 和Presto 還可以和各種其他的資料儲存系統配合使用。

不像關係型資料庫,SQL 引擎獨立於資料儲存系統。相對而言,關係型資料庫將查詢引擎和儲存繫結到一個單獨的緊耦合系統中,這允許某些型別的優化。另一方面,拆分它們,提供了更大的靈活性,儘管存在潛在的效能損失。

下面的圖1展示了主要的SQL 引擎的流行程度,資料由奧地利諮詢公司Solid IT 維護的DB-Engines 提供。DB-Engines 每月為超過200個資料庫系統計算流行得分。得分反應了搜尋引擎的查詢,線上討論的提及,提供的工作,專業資歷的提及,以及tweets。

hive

雖然Impala、Spark SQL、Drill、Hawq 和Presto 一直在執行效能、併發量和吞吐量上擊敗Hive,但是Hive 仍然是最流行的(至少根據DB-Engines 的標準)。原因有3個:

  • Hive 是Hadoop 的預設SQL 選項,每個版本都支援。而其他的要求特定的供應商和合適的使用者;
  • Hive 已經在減少和其他引擎的效能差距。大多數Hive 的替代者在2012年推出,分析師等待Hive 查詢的完成等到要自殺。然而當Impala、Spark、Drill 等大步發展的時候,Hive只是一直跟著,慢慢改進。現在,雖然Hive 不是最快的選擇,但是它比五年前要好得多;
  • 雖然前沿的速度很酷,但是大多數機構都知道世界並沒有盡頭。即使一個年輕的市場經理需要等待10秒鐘來查明上週二Duxbury 餐廳的雞翅膀的銷量是否超過了牛肉漢堡。

在下面的圖2中可以看出,相對於領先的商業資料倉儲應用,使用者對頂尖的SQL 引擎更感興趣。

hive

對於開源專案來說,最佳的健康度量是它的活躍開發者社群的大小。如下面的圖3所示,Hive 和Presto 有最大的貢獻者基礎。(Spark SQL 的資料暫缺)

hive

在2016年,Cloudera、Hortonworks、Kognitio 和Teradata 陷入了Tony Baer 總結的基準測試之戰,令人震驚的是,供應商偏愛的SQL 引擎在每一個研究中都擊敗了其他選擇,這帶來一個問題:基準測試還有意義嗎?

AtScale 一年兩次的基準測試並不是毫無根據的。作為一個BI 初創公司,AtScale 銷售銜接BI 前端和SQL 後端的軟體。公司的軟體是引擎中立的,它嘗試儘可能多的相容,其在BI 領域的廣泛經驗讓這些測試有了實際的意義。

AtScale 最近的關鍵發現,包括了Hive、Impala、Spark SQL 和Presto:

  • 4個引擎都成功執行了AtScale 的BI 基準查詢;
  • 取決於資料量、查詢複雜度和併發使用者數,每個引擎都有自己的效能優勢:
    • Impala 和Spark SQL 在小資料量的查詢上擊敗了其他人;
    • Impala 和Spark SQL 在大資料量的複雜join 上擊敗了其他人;
    • Impala 和Presto 在併發測試上表現的更好。
  • 對比6個月之前的基準測試,所有的引擎都有了2-4倍的效能提升。

Alex Woodie 報告了測試結果,Andrew Oliver 對其進行分析。

讓我們來深入瞭解這些專案。

Apache Hive  

Apache Hive 是Hadoop 生態系統中的第一個SQL 框架。Facebook 的工程師在2007年介紹了Hive,並在2008年將程式碼捐獻給Apache 軟體基金會。2010年9月,Hive 畢業成為Apache 頂級專案。Hadoop 生態系統中的每個主要參與者都發布和支援Hive,包括Cloudera、MapR、Hortonworks 和IBM。Amazon Web Services 在Elastic MapReduce(EMR)中提供了Hive 的修改版作為雲服務。

早期釋出的Hive 使用MapReduce 執行查詢。複雜查詢需要多次傳遞資料,這會降低效能。所以Hive 不適合互動式分析。由Hortonworks 領導的Stinger 明顯的提高了Hive 的效能,尤其是通過使用Apache Tez,一個精簡MapReduce 程式碼的應用框架。Tez 和ORCfile,一種新的儲存格式,對Hive 的查詢產生了明顯的提速。

Cloudera 實驗室帶領一個並行專案重新設計Hive 的後端,使其執行在Apache Spark 上。經過長期測試後,Cloudera 在2016年初發布了Hive-on-Spark 的正式版本。

在2016年,Hive 有100多人的貢獻者。該團隊在2月份釋出了Hive 2.0,並在6月份釋出了Hive 2.1。Hive 2.0 的改進包括了對Hive-on-Spark 的多個改進,以及效能、可用性、可支援性和穩定性增強。Hive 2.1 包括了Hive LLAP(”Live Long and Process“),它結合持久化的查詢伺服器和優化後的記憶體快取,來實現高效能。該團隊聲稱提高了25倍。

9月,Hivemall 專案進入了Apache 孵化器,正如我在我的機器學習年度總結的第二部分中指出的。Hivemall 最初由Treasure Data 開發並捐獻給Apache 軟體基金會,它是一個可擴充套件的機器學習庫,通過一系列的Hive UDF 來實現,設計用於在Hive、Pig 和Spark SQL 上執行MapReduce。該團隊計劃在2017年第一季度釋出了第一個版本。

Apache Impala

2012年,Cloudera 推出了Impala,一個開源的MPP SQL 引擎,作為Hive 的高效能替代品。Impala 使用HDFS 和HBase,並利用了Hive 後設資料。但是,它繞開了使用MapReduce 執行查詢。

Cloudera 的首席戰略官Mike Olson 在2013年底說到Hive 的架構是有根本缺陷的。在他看來,開發者只能用一種全新的方式來實現高效能SQL,例如Impala。2014年的1月、5月和9月,Cloudera 釋出了一系列的基準測試。在這些測試中,Impala 展示了其在查詢執行的逐步改進,並且顯著優於基於Tez 的Hive、Spark SQL 和Presto。除了執行快速,Impala 在併發行、吞吐量和可擴充套件性上也表現優秀。

2015年,Cloudera 將Impala 捐獻給Apache 軟體基金會,進入了Apache 孵化計劃。Cloudera、MapR、Oracle 和Amazon Web Services 分發Impala,Cloudera、MapR 和Oracle 提供了商業構建和安裝支援。

2016年,Impala 在Apache 孵化器中取得了穩步發展。該團隊清理了程式碼,將其遷移到Apache 基礎架構,並在10月份釋出了第一個Apache 版本2.7.0。新版本包括了效能提升和可擴充套件性改進,以及一些其他小的增強。

9月,Cloudera 釋出了一項研究結果,該研究比較了Impala 和Amazon Web Services 的Redshift 列儲存資料庫。報告讀起來很有意思,雖然主題一貫的需要注意供應商的基準測試。

Spark SQL

Spark SQL 是Spark 用於結構化資料處理的元件。Apache Spark 團隊 在2014年釋出了Spark SQL,並吸收了一個叫Shark 的早期的Hive-on-Spark 專案。它迅速成為最廣泛使用的Spark 模組。

Spark SQL 使用者可以執行SQL 查詢,從Hive 中讀取資料,或者使用它來建立Spark Dataset和DataFrame(Dataset 是分散式的資料集合,DataFrame 是統一命名的Dataset 列)。Spark SQL 的介面向Spark 提供了資料結構和執行操作的資訊,Spark 的Catalyst 優化器使用這些資訊來構造一個高效的查詢。

2015年,Spark 的機器學習開發人員引入了ML API,一個利用Spark DataFrame 代替低階別Spark RDD API 的包。這種方法被證明是有吸引力和富有成果的;2016年,隨著2.0 的釋出,Spark 團隊將基於RDD 的API改為維護模式。DataFrame API現在是Spark 機器學習的主要介面。

此外,在2016年,該團隊還在Spark 2.1.0的Alpha 版本中釋出了結構化的流式處理。結構化的流式處理是構建在Spark SQL 上的一個流處理引擎。使用者可以像對待靜態源一樣,用同樣的方式查詢流式資料來源,並且可以在單個查詢中組合流式和靜態源。Spark SQL 持續執行查詢,並且在流式資料到達的時候更新結果。結構化的流通過檢查點和預寫日誌來提供一次性的容錯保障。

Apache Drill

2012年,由Hadoop 分銷商的領導者之一MapR 領導的一個團隊,提出構建一個Google Dremel 的開源版本,一個互動式的分散式熱點分析系統。他們將其命名為Apache Drill。Drill 在Apache 孵化器中被冷落了兩年多,最終在2014年底畢業。該團隊在2015年釋出了1.0。

MapR 分發和支援Apache Drill。

2016年,超過50個人對Drill 做出了貢獻。該團隊在2016年釋出了5個小版本,關鍵的增強功能包括:

  • Web 認證
  • 支援Apache Kudu 列資料庫
  • 支援HBase 1.x
  • 動態UDF 支援

2015年,兩位關鍵的Drill 貢獻者離開了MapR,並啟動了Dremio,該專案尚未釋出。

Apache HAWQ

Pivotal 軟體在2012年推出了一款商業許可的高效能SQL 引擎HAWQ,並在嘗試市場營銷時取得了小小的成功。改變戰略後,Pivotal 在2015年6月將專案捐獻給了Apache,並於2015年9月進入了Apache 孵化器程式。

15個月之後,HAWQ 仍然待在孵化器中。2016年12月,該團隊釋出了HAWQ 2.0.0.0,加入了一些錯誤修復。我猜它會在2017年畢業。

對HAWQ 喜愛的一個小點是它支援Apache MADlib,一個同樣在孵化器中的SQL 機器學習專案。HAWQ 和MADlib 的組合,應該是對購買了Greenplum 並且想知道發生了什麼的人們的一個很好的安慰。

Presto

Facebook 工程師在2012年發起了Presto 專案,作為Hive 的一個快速互動的取代。在2013年推出時,成功的支援了超過1000個Facebook 使用者和每天超過30000個PB級資料的查詢。2013年Facebook 開源了Presto。

Presto 支援多種資料來源的ANSI SQL 查詢,包括Hive、Cassandra、關係型資料庫和專有檔案系統(例如Amazon Web Service 的S3)。Presto 的查詢可以聯合多個資料來源。使用者可以通過C、Java、Node.js、PHP、Python、R和Ruby 來提交查詢。

Airpal 是Airbnb 開發的一個基於web 的查詢工具,讓使用者可以通過瀏覽器來提交查詢到Presto。Qubole 位Presto 提供了管理服務。AWS 在EMR 上提供Presto 服務。

2015年6月,Teradata 宣佈計劃開發和支援該專案。根據宣佈的三階段計劃,Teredata 提出將Presto 整合導Hadoop 生態系統中,能夠在YARN 中進行操作,並且通過ODBC 和JDBC 增強連線性。Teredata 提供了自己的Presto 發行版,附帶一份資料表。2016年6月,Teradata 宣佈了Information Builders、Looker、Qlik、Tableau 和ZoomData 的鑑定結果,以及正在進行中的MicroStrategy 和Microsoft Power BI。

Presto 是一個非常活躍的專案,有一個巨大的和充滿活力的貢獻者社群。該團隊釋出的速度比Miki Sudo 吃熱狗的速度還要快–我統計了下,2016年共釋出了42個版本。Teradata 並沒有打算總結有什麼新的東西,我也不打算在42個發行說明裡去篩選,所以就讓我們說它更好吧。


 

其他Apache 專案

這裡還有5個其他的Apache 生態系統的SQL 混合專案。

Apache Calcite  

Apache Calcite 是一個開源的資料庫構建框架。它包括:

  • SQL 解析器、驗證器和JDBC 驅動
  • 查詢優化工具,包括關係代數API,基於規則的計劃器和基於成本的查詢優化器

Apache Hive 使用Calcite 進行基於成本的查詢優化,而Apache Drill 和Apache Kylin 使用SQL 解析器。

Calcite 團隊在2016年推出了5個版本包括bug 修復和用於Cassandra、Druid 和Elasticsearch 的新介面卡。

Apache Kylin

Apache Kylin 是一個具有SQL 介面的OLAP 引擎。由eBay 開發並捐獻給Apache,Kylin 在2015年畢業成為頂級專案。

2016年成立的創業公司Kyligence 提供商業支援和一個叫做KAP 的資料倉儲產品,雖然在Crunchbase 上沒有列出它的資金情況,有訊息來源稱它有一個強大的背景,並且在上海有個大辦公室。

Apache Phoenix

Apache Phoenix 是一個執行在HBase 上的SQL 框架,繞過了MapReduce。Salesforce 開發了該軟體並在2013年捐獻給了Apache。2014年5月專案畢業成為頂級專案。Hortonworks 的Hortonworks 資料平臺中包含該專案。自從領先的SQL 引擎都適配HBase 之後,我不清楚為什麼我們還需要Phoenix。

Apache Tajo

Apache Tajo 是Gruter 在2011年推出的一個快速SQL 資料倉儲框架,一個大資料基礎設施公司,並在2013年捐獻給Apache。2014年Tajo 畢業成為頂級專案。在作為Gruter 主要市場的韓國之外,該專案很少吸引到預期使用者和貢獻者的興趣。除了Gartner 的Nick Heudecker 曾提過,該專案不在任何人的工作臺上。

Apache Trafodion

Apache Trafodion 是另一個SQL-on-HBase 專案,由HP 實驗室構思,它告訴你幾乎所有你需要知道的。2014年6月HP 釋出Trafodion,一個月之後,Apache Phoenix 畢業投產。6個月之後,HP 的高管們認為相對於另一款SQL-on-HBase 引擎,它的商業潛力有限,所以他們將專案捐獻給了Apache,專案於2015年5月進入孵化器。

如果孵化結束,Trafodion 承諾成為一個事務資料庫。不幸的是,這個領域有大量的選擇,而開發團隊唯一的競爭優勢似乎是“它是開源的,所以它很便宜”。