Hadoop教程:8個值得關注的SQL-on-Hadoop框架
數據的操作語言是SQL,因此很多工具的開發(fā)目標自然就是能夠在Hadoop上使用SQL。這些工具有些只是在MapReduce之上做了簡單的包裝,有些則是在HDFS之上實現了完整的數據倉庫,而有些則介于這兩者之間。這樣的工具有很多,來自于Shoutlet的軟件開發(fā)工程師Matthew Rathbone最近發(fā)表了一篇文章,他列舉了一些常用的工具并對各個工具的應用場景和未來進行了分析。
Apache Hive
Hive是原始的SQL-on-Hadoop解決方案。它是一個開源的Java項目,能夠將SQL轉換成一系列可以在標準的Hadoop TaskTrackers上運行的MapReduce任務。Hive通過一個metastore(本身就是一個數據庫)存儲表模式、分區(qū)和位置以期提供像 MySQL一樣的功能。它支持大部分MySQL語法,同時使用相似的 database/table/view約定組織數據集。Hive提供了以下功能:
- Hive-QL,一個類似于SQL的查詢接口
- 一個命令行客戶端
- 通過中央服務支持元數據共享
- JDBC 驅動
- 多語言 Apache Thrift 驅動
- 一個用于創(chuàng)建自定義函數和轉換的Java API
何時使用它?
Hive是一個幾乎所有的Hadoop機器都安裝了的實用工具。Hive環(huán)境很容易建立,不需要很多基礎設施。鑒于它的使用成本很低,我們幾乎沒有理由將其拒之門外。
但是需要注意的是,Hive的查詢性能通常很低,這是因為它會把SQL轉換為運行得較慢的MapReduce任務。
Hive的未來
Hortonworks 目前正在推進Apache Tez 的開發(fā)以便于將其作為新的Hive后端解決現在因為使用MapReduce而導致的響應時間慢的問題。
Cloudera Impala
Impala是一個針對Hadoop的開源的“交互式”SQL查詢引擎。它由Cloudera構建,后者是目前市場上最大的Hadoop供應商之一。和Hive一樣,Impala也提供了一種可以針對已有的Hadoop數據編寫SQL查詢的方法。與Hive不同的是它并沒有使用MapReduce執(zhí)行查詢,而是使用了自己的執(zhí)行守護進程集合,這些進程需要與Hadoop數據節(jié)點安裝在一起。Impala提供了以下功能:
- ANSI-92 SQL語法支持
- HIVE-QL支持
- 一個命令行客戶端
- ODBC 驅動
- 與Hive metastore互操作以實現跨平臺的模式共享
- 一個用于創(chuàng)建函數和轉換的C++ API
何時使用它?
Impala的設計目標是作為Apache Hive的一個補充,因此如果你需要比Hive更快的數據訪問那么它可能是一個比較好的選擇,特別是當你部署了一個Cloudera、MapR或者 Amazon Hadoop集群的時候。但是,為了最大限度地發(fā)揮Impala的優(yōu)勢你需要將自己的數據存儲為特定的文件格式(Parquet),這個轉變可能會比較痛苦。另外,你還需要在集群上安裝Impala守護進程,這意味著它會占用一部分TaskTrackers的資源。Impala目前并不支持YARN。
Impala的未來
Cloudera 已經開始嘗試將Impala與YARN集成,這讓我們在下一代Hadoop集群上做Impala開發(fā)的時候不再那么痛苦。
Presto
Presto是一個用Java語言開發(fā)的、開源的“交互式”SQL查詢引擎。它由Facebook構建,即Hive最初的創(chuàng)建者。Presto采用的方法類似于Impala,即提供交互式體驗的同時依然使用已有的存儲在Hadoop上的數據集。它也需要安裝在許多“節(jié)點”上,類似于Impala。Presto提供了以下功能:
- ANSI-SQL語法支持 (可能是ANSI-92)
- JDBC 驅動
- 一個用于從已有數據源中讀取數據的“連接器”集合。連接器包括:HDFS、Hive和Cassandra
- 與Hive metastore交互以實現模式共享
何時使用它?
Presto的目標和Cloudera Impala一樣。但是與Impala不同的是它并沒有被一個主要的供應商支持,所以很不幸你在使用Presto的時候無法獲得企業(yè)支持。但是有一些知名的、令人尊敬的技術公司已經在產品環(huán)境中使用它了,它大概是有社區(qū)的支持。與Impala相似的是,它的性能也依賴于特定的數據存儲格式(RCFile)。老實地說,在部署Presto之前你需要仔細考慮自己是否有能力支持并調試Presto,如果你對它的這些方面滿意并且相信Facebook并不會遺棄開源版本的Presto,那么使用它。
Shark
Shark是由UC Berkeley大學使用Scala語言開發(fā)的一個開源SQL查詢引擎。與Impala和Presto相似的是,它的設計目標是作為Hive的一個補充,同時在它自己的工作節(jié)點集合上執(zhí)行查詢而不是使用MapReduce。與Impala和Presto不同的是Shark構建在已有的 Apache Spark數據處理引擎之上。Spark現在非常流行,它的社區(qū)也在發(fā)展壯大??梢詫park看作是一個比MapReduce更快的可選方案。Shark提供了以下功能:
- 類似于SQL的查詢語言支持,支持大部分Hive-QL
- 一個命令行客戶端(基本上是Hive客戶端)
- 與Hive metastore交互以實現模式共享
- 支持已有的Hive 擴展,例如UDFs和SerDes
何時使用它?
Shark非常有趣,因為它既想支持Hive功能又想極力地改善性能?,F在有很多組織正在使用Spark,但是不確定有多少在用Shark。我并不認為它的性能能夠趕上Presto和Impala,但是如果你已經打算使用Spark那么可以嘗試使用一下Shark,特別是Spark正在被越來越多的主要供應商所支持。
Apache Drill
Apache Drill是一個針對Hadoop的、開源的“交互式”SQL查詢引擎。Drill現在由MapR推動,盡管他們現在也支持Impala。Apache Drill的目標與Impala和Presto相似——對大數據集進行快速的交互式查詢,同時它也需要安裝工作節(jié)點(drillbits)。不同的是 Drill旨在支持多種后端存儲(HDFS、HBase、MongoDB),同時它的一個重點是復雜的嵌套數據集(例如JSON)。不幸的是drill現在僅在Alpha階段,因此應用還不是很廣泛。Drill提供了以下功能:
- ANSI SQL兼容
- 能夠與一些后端存儲和元數據存儲交互(Hive、HBase、MongoDB)
- UDFs擴展框架、存儲插件
何時使用它?
最好別用。該項目依然在Alpha階段,因此不要在生產環(huán)境中使用它。
HAWQ
Hawq是EMC Pivotal 公司的一個非開源產品,作為該公司專有Hadoop版本“Pivotal HD”的一部分提供。Pivotal宣稱Hawq是“世界上最快的Hadoop SQL引擎”,已經發(fā)展了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驅動
- 一個命令行客戶端
- 批量加載數據的機制
- 能夠創(chuàng)建新表,或者映射到已有的HBase數據
何時使用它?
如果你使用HBase那么就使用它。盡管Hive能夠從HBase中讀取數據,但是Phoenix還提供了寫入功能。不清楚它是否適合產品環(huán)境和事務,但是作為一個分析工具它的功能無疑足夠強大。
Apache Tajo
Apache Tajo項目的目的是在HDFS之上構建一個先進的數據倉庫系統(tǒng)。Tajo將自己標榜為一個“大數據倉庫”,但是它好像和之前介紹的那些低延遲查詢引擎類似。雖然它支持外部表和Hive數據集(通過HCatalog),但是它的重點是數據管理,提供低延遲的數據訪問,以及為更傳統(tǒng)的ETL提供工具。它也需要在數據節(jié)點上部署Tajo特定的工作進程。Tajo的功能包括:
- ANSI SQL兼容
- JDBC 驅動
- 集成Hive metastore能夠訪問Hive數據集
- 一個命令行客戶端
- 一個自定義函數API
何時使用它?
雖然Tajo的一些基準測試結果非常漂亮,但是基準測試可能會有一些偏見,不能對其完全信任 。Tajo社區(qū)現在也不夠繁榮,在北美也沒有主要的Hadoop供應商支持它。但是如果你在南韓,Gruter 是主要的項目贊助者,如果你使用他們的平臺那么可能會得到他們良好的支持,否則的話最好還是使用Impala或者Presto這些引擎。
來源:InfoQ