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