從問題域出發(fā)認(rèn)識Hadoop生態(tài)系統(tǒng)
近些年來Hadoop生態(tài)系統(tǒng)發(fā)展迅猛,它本身包含的軟件越來越多,同時帶動了周邊系統(tǒng)的繁榮發(fā)展。尤其是在分布式計算這一領(lǐng)域,系統(tǒng)繁多紛雜,時不時冒出一個系統(tǒng),號稱自己比MapReduce或者Hive高效幾十倍,幾百倍。有一些無知的人,總是跟著瞎起哄,說Impala將取代Hive,Spark將取代Hadoop MapReduce等。本文則從問題域觸發(fā),解釋說明Hadoop中每個系統(tǒng)獨(dú)特的作用/魅力以及它們的不可替代性。
Hadoop作為一個生態(tài)系統(tǒng),每個系統(tǒng)只解決某一個特定的問題域(甚至可能很窄),這也是Hadoop的魅力所在:不搞統(tǒng)一型的一個全能系統(tǒng),而是小而精的多個小系統(tǒng)。本文重點討論分布式計算領(lǐng)域的幾個開源系統(tǒng)可以解決的問題域。
(1)MapReduce:古老的分布式計算框架,它的特點是擴(kuò)展性、容錯性好,易于編程,適合離線數(shù)據(jù)處理,不擅長流式處理、內(nèi)存計算、交互式計算等領(lǐng)域。MapReduce網(wǎng)址是:http://hadoop.apache.org/
(2)Hive:披著SQL外衣的MapReduce。Hive是為方便用戶使用MapReduce而在外面包了一層SQL,由于Hive采用了SQL,它的問題域比MapReduce更窄,因為很多問題,SQL表達(dá)不出來,比如一些數(shù)據(jù)挖掘算法,推薦算法、圖像識別算法等,這些仍只能通過編寫MapReduce完成。Hive網(wǎng)址是:http://hive.apache.org/
(3)Pig:披著腳本語言外衣的MapReduce,為了突破Hive SQL表達(dá)能力的限制,采用了一種更具有表達(dá)能力的腳本語言PIG。由于pig語言強(qiáng)大的表達(dá)能力,Twitter甚至基于Pig實現(xiàn)了一個大規(guī)模機(jī)器學(xué)習(xí)平臺(參考Twitter在SIGMOD2012的文章“Large-Scale Machine Learning at Twitter”)。Pig網(wǎng)址是:http://pig.apache.org/
(4)Stinger Initiative(Tez optimized Hive):Hortonworks開源了一個DAG計算框架Tez,該框架可以像MapReduce一樣,可以用來設(shè)計DAG應(yīng)用程序,但需要注意的是,Tez只能運(yùn)行在YARN上。Tez的一個重要應(yīng)用是優(yōu)化Hive和PIG這種典型的DAG應(yīng)用場景,它通過減少數(shù)據(jù)讀寫IO,優(yōu)化DAG流程使得Hive速度提供了很多倍。(Stinger正在開發(fā)中,Tez代碼:https://svn.apache.org/repos/asf/incubator/tez/branches/)
(5)Spark:為了提高M(jìn)apReduce的計算效率,伯克利開發(fā)了spark,spark可看做基于內(nèi)存的MapReduce實現(xiàn),此外,伯克利還在Spark基礎(chǔ)上包了一層SQL,產(chǎn)生了一個新的類似Hive的系統(tǒng)Shark,但目前Spark和Shark尚屬于實驗室產(chǎn)品。Spark網(wǎng)站是:http://spark-project.org/
(6)Storm/S4:Hadoop在實時計算/流式計算領(lǐng)域(MapReduce假設(shè)輸入數(shù)據(jù)是靜態(tài)的,處理過程中不能被修改,而流式計算則假設(shè)數(shù)據(jù)源是流動的,數(shù)據(jù)會源源不斷流入系統(tǒng)),一直比較落后,還好,Twitter開源的Storm和yahoo!開源的S4彌補(bǔ)了這一缺點,Storm在淘寶,mediaV等公司得到廣泛的應(yīng)用。Storm網(wǎng)址是:http://storm-project.net/,S4網(wǎng)址是:http://incubator.apache.org/s4/
(7)Cloudera Impala/Apache drill:Google Dremel的開源實現(xiàn),也許是因為交互式計算需求太過強(qiáng)烈,發(fā)展迅猛,impala僅用了一年左右便推出1.0GA版本。這種系統(tǒng)適用于交互式處理場景,***產(chǎn)生的數(shù)據(jù)量一定要少。Impala盡管發(fā)布了1.0版本,但在容錯性、擴(kuò)展性、支持自定義函數(shù)等方面,有很長的路要走。Cloudera Impala網(wǎng)址是:https://github.com/cloudera/impala,Apache drill網(wǎng)址是:http://incubator.apache.org/drill/。
Hortonworks將應(yīng)用需求進(jìn)行了如下劃分:
映射到上面幾種系統(tǒng),可知:
(1)實時應(yīng)用場景(0~5s):Storm、S4、Cloudera Impala,Apache Drill等;
(2)交互式場景(5s~1m):這種場景通常能要求必須支持SQL,則可行系統(tǒng)有:Cloudera Impala、Apache Drill、Shark等;
(3)非交互式場景(1m~1h):通常運(yùn)行時間較長,處理數(shù)據(jù)量較大,對容錯性和擴(kuò)展性要求較高,可行系統(tǒng)有:MapReduce、Hive、Pig、Stinger等;
(4)批處理場景(1h+):通常運(yùn)行時間很長,處理數(shù)據(jù)量很大,對容錯性和擴(kuò)展性要求很高,可行系統(tǒng)有:MapReduce、Hive、Pig、Stinger等。
【作者信息】本文作者:Dong(董西成),專注于大規(guī)模數(shù)據(jù)處理相關(guān)技術(shù),作者的Hadoop新書《Hadoop技術(shù)內(nèi)幕:深入解析MapReduce架構(gòu)設(shè)計與實現(xiàn)原理》已經(jīng)開始在當(dāng)當(dāng)、京東、卓越等網(wǎng)站銷售。感興趣的讀者朋友們可以去看看。