8個值得關注的SQL-on-Hadoop框架

infoq發表於2014-09-15

  資料的操作語言是SQL,因此很多工具的開發目標自然就是能夠在Hadoop上使用SQL。這些工具有些只是在MapReduce之上做了簡單的包裝,有些則是在HDFS之上實現了完整的資料倉儲,而有些則介於這兩者之間。這樣的工具有很多,來自於Shoutlet的軟體開發工程師Matthew Rathbone最近發表了一篇文章,他列舉了一些常用的工具並對各個工具的應用場景和未來進行了分析。

 

 Apache Hive

  Hive是原始的SQL-on-Hadoop解決方案。它是一個開源的Java專案,能夠將SQL轉換成一系列可以在標準的Hadoop TaskTrackers上執行的MapReduce任務。Hive通過一個metastore(本身就是一個資料庫)儲存表模式、分割槽和位置以期提供像MySQL一樣的功能。它支援大部分MySQL語法,同時使用相似的 database/table/view約定組織資料集。Hive提供了以下功能:

  • Hive-QL,一個類似於SQL的查詢介面
  • 一個命令列客戶端
  • 通過中央服務支援後設資料共享
  • JDBC 驅動
  • 多語言 Apache Thrift 驅動
  • 一個用於建立自定義函式和轉換的Java API

  何時使用它?

  Hive是一個幾乎所有的Hadoop機器都安裝了的實用工具。Hive環境很容易建立,不需要很多基礎設施。鑑於它的使用成本很低,我們幾乎沒有理由將其拒之門外。

  但是需要注意的是,Hive的查詢效能通常很低,這是因為它會把SQL轉換為執行得較慢的MapReduce任務。

  Hive的未來

  Hortonworks 目前正在推進Apache Tez 的開發以便於將其作為新的Hive後端解決現在因為使用MapReduce而導致的響應時間慢的問題。

 Cloudera Impala

  Impala是一個針對Hadoop的開源的“互動式”SQL查詢引擎。它由Cloudera構建,後者是目前市場上最大的Hadoop供應商之一。和Hive一樣,Impala也提供了一種可以針對已有的Hadoop資料編寫SQL查詢的方法。與Hive不同的是它並沒有使用MapReduce執行查詢,而是使用了自己的執行守護程式集合,這些程式需要與Hadoop資料節點安裝在一起。Impala提供了以下功能:

  • ANSI-92 SQL語法支援
  • HIVE-QL支援
  • 一個命令列客戶端
  • ODBC 驅動
  • 與Hive metastore互操作以實現跨平臺的模式共享
  • 一個用於建立函式和轉換的C++ API

  何時使用它?

  Impala的設計目標是作為Apache Hive的一個補充,因此如果你需要比Hive更快的資料訪問那麼它可能是一個比較好的選擇,特別是當你部署了一個Cloudera、MapR或者Amazon Hadoop叢集的時候。但是,為了最大限度地發揮Impala的優勢你需要將自己的資料儲存為特定的檔案格式(Parquet),這個轉變可能會比較痛苦。另外,你還需要在叢集上安裝Impala守護程式,這意味著它會佔用一部分TaskTrackers的資源。Impala目前並不支援YARN。

  Impala的未來

  Cloudera 已經開始嘗試將Impala與YARN整合,這讓我們在下一代Hadoop叢集上做Impala開發的時候不再那麼痛苦。

 Presto

  Presto是一個用Java語言開發的、開源的“互動式”SQL查詢引擎。它由Facebook構建,即Hive最初的建立者。Presto採用的方法類似於Impala,即提供互動式體驗的同時依然使用已有的儲存在Hadoop上的資料集。它也需要安裝在許多“節點”上,類似於Impala。Presto提供了以下功能:

  • ANSI-SQL語法支援 (可能是ANSI-92)
  • JDBC 驅動
  • 一個用於從已有資料來源中讀取資料的“聯結器”集合。聯結器包括:HDFS、Hive和Cassandra
  • 與Hive metastore互動以實現模式共享

  何時使用它?

  Presto的目標和Cloudera Impala一樣。但是與Impala不同的是它並沒有被一個主要的供應商支援,所以很不幸你在使用Presto的時候無法獲得企業支援。但是有一些知名的、令人尊敬的技術公司已經在產品環境中使用它了,它大概是有社群的支援。與Impala相似的是,它的效能也依賴於特定的資料儲存格式(RCFile)。老實地說,在部署Presto之前你需要仔細考慮自己是否有能力支援並除錯Presto,如果你對它的這些方面滿意並且相信Facebook並不會遺棄開源版本的Presto,那麼使用它。

 Shark

  Shark是由UC Berkeley大學使用Scala語言開發的一個開源SQL查詢引擎。與Impala和Presto相似的是,它的設計目標是作為Hive的一個補充,同時在它自己的工作節點集合上執行查詢而不是使用MapReduce。與Impala和Presto不同的是Shark構建在已有的 Apache Spark資料處理引擎之上。Spark現在非常流行,它的社群也在發展壯大。可以將Spark看作是一個比MapReduce更快的可選方案。Shark提供了以下功能:

  • 類似於SQL的查詢語言支援,支援大部分Hive-QL
  • 一個命令列客戶端(基本上是Hive客戶端)
  • 與Hive metastore互動以實現模式共享
  • 支援已有的Hive 擴充套件,例如UDFs和SerDes

  何時使用它?

  Shark非常有趣,因為它既想支援Hive功能又想極力地改善效能。現在有很多組織正在使用Spark,但是不確定有多少在用Shark。我並不認為它的效能能夠趕上Presto和Impala,但是如果你已經打算使用Spark那麼可以嘗試使用一下Shark,特別是Spark正在被越來越多的主要供應商所支援。

 Apache Drill

  Apache Drill是一個針對Hadoop的、開源的“互動式”SQL查詢引擎。Drill現在由MapR推動,儘管他們現在也支援Impala。Apache Drill的目標與Impala和Presto相似——對大資料集進行快速的互動式查詢,同時它也需要安裝工作節點(drillbits)。不同的是Drill旨在支援多種後端儲存(HDFS、HBase、MongoDB),同時它的一個重點是複雜的巢狀資料集(例如JSON)。不幸的是drill現在僅在Alpha階段,因此應用還不是很廣泛。Drill提供了以下功能:

  • ANSI SQL相容
  • 能夠與一些後端儲存和後設資料儲存互動(Hive、HBase、MongoDB)
  • UDFs擴充套件框架、儲存外掛

  何時使用它?

  最好別用。該專案依然在Alpha階段,因此不要在生產環境中使用它。

 HAWQ

  Hawq是EMC Pivotal 公司的一個非開源產品,作為該公司專有Hadoop版本“Pivotal HD”的一部分提供。Pivotal宣稱Hawq是“世界上最快的Hadoop SQL引擎”,已經發展了10年。然而這種觀點難以得到證實。很難知道Hawq到底提供了哪些特性,但是可以收集到下面這些:

  • 完整的SQL語法支援
  • 能夠通過Pivotal Xtension框架(PXF)與Hive和HBase互操作
  • 能夠與Pivotal GemFire XD(記憶體實時資料庫)互操作

  何時使用它?

  如果你使用由Pivotal公司提供的Hadoop版本那麼就使用它,否則不使用。

 BigSQL

  Big Blue 有它自己的Hadoop版本,稱為Big Insights。BigSQL作為該版本的一部分提供。BigSQL用於使用MapReduce和其他能夠提供低延遲結果的方法(不詳)查詢儲存在HDFS中的資料。從BigSQL的文件中可以瞭解到它大概提供以下功能:

  • JDBC和ODBC 驅動
  • 廣泛的SQL支援
  • 可能有一個命令列客戶端

  何時使用它?

  如果你是IBM的客戶那麼就使用它,否則不使用。

 Apache Phoenix

  Apache Phoenix是一個用於Apache HBase的開源SQL引擎。它的目標是通過一個嵌入的JDBC驅動對儲存在HBase中的資料提供低延遲查詢。與之前介紹的其他引擎不同的是,Phoenix提供了HBase資料的讀、寫操作。它的功能有:

  • 一個JDBC驅動
  • 一個命令列客戶端
  • 批量載入資料的機制
  • 能夠建立新表,或者對映到已有的HBase資料

  何時使用它?

  如果你使用HBase那麼就使用它。儘管Hive能夠從HBase中讀取資料,但是Phoenix還提供了寫入功能。不清楚它是否適合產品環境和事務,但是作為一個分析工具它的功能無疑足夠強大。

 Apache Tajo

  Apache Tajo專案的目的是在HDFS之上構建一個先進的資料倉儲系統。Tajo將自己標榜為一個“大資料倉儲”,但是它好像和之前介紹的那些低延遲查詢引擎類似。雖然它支援外部表和Hive資料集(通過HCatalog),但是它的重點是資料管理,提供低延遲的資料訪問,以及為更傳統的ETL提供工具。它也需要在資料節點上部署Tajo特定的工作程式。Tajo的功能包括:

  • ANSI SQL相容
  • JDBC 驅動
  • 整合Hive metastore能夠訪問Hive資料集
  • 一個命令列客戶端
  • 一個自定義函式API

  何時使用它?

  雖然Tajo的一些基準測試結果非常漂亮,但是基準測試可能會有一些偏見,不能對其完全信任 。Tajo社群現在也不夠繁榮,在北美也沒有主要的Hadoop供應商支援它。但是如果你在南韓,Gruter 是主要的專案贊助者,如果你使用他們的平臺那麼可能會得到他們良好的支援,否則的話最好還是使用Impala或者Presto這些引擎。

相關文章