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