如何用Hadoop搭建大型分布式應(yīng)用?
在去年Techonomy會(huì)議上參加討論時(shí),谷歌CEO Eric Schmidt引用一個(gè)驚人的事實(shí)指出,我們現(xiàn)在每?jī)商靹?chuàng)造的信息和2003年以來(lái)整個(gè)歷史上所創(chuàng)建的信息一樣多。信息泛濫帶來(lái)了一系列的技術(shù)突破,這讓企業(yè)的數(shù)據(jù)存儲(chǔ)擴(kuò)展到數(shù)千億字節(jié)甚至是數(shù)拍字節(jié)。谷歌在此領(lǐng)域的貢獻(xiàn)是尤其值得注意,包括它在MapReduce上的工作,它是一種大型分布式數(shù)據(jù)處理的方法,谷歌采用此方法來(lái)記錄位于索引資源(映射這些數(shù)據(jù))收藏里的關(guān)鍵字或短語(yǔ),接著再把這些位置的記錄和清單返回給用戶(將映射數(shù)據(jù)減少到緊密相關(guān)的結(jié)果)。映射和減少操作可以涵蓋模式識(shí)別、圖解分析、風(fēng)險(xiǎn)管理和預(yù)測(cè)模式。
雖然谷歌的MapReduce安裝是專有的,還存在MapReduce概念的很多開源安裝,包括Apache Hadoop。事實(shí)上,Hadoop已經(jīng)是分布式數(shù)據(jù)處理的實(shí)際解決方案了,數(shù)十個(gè)國(guó)際公司已經(jīng)從執(zhí)行和開發(fā)兩個(gè)方面大力投資該項(xiàng)目。Adobe、Amazon、AOL、Baidu、EBay、Facebook、Hulu、IBM、Last.fm、LinkedIn、Ning、Twitter和Yahoo等已成為用戶,很多大學(xué)、醫(yī)院和研究中心也都成為用戶,采用并不受互聯(lián)網(wǎng)重要人物的限制。
Hadoop項(xiàng)目介紹
和Apache軟件基金會(huì)(ASF)的很多項(xiàng)目一樣,Hadoop是一個(gè)涵蓋性術(shù)語(yǔ),它分配基金會(huì)的全部措施來(lái)產(chǎn)生“可信、可擴(kuò)展且分布式計(jì)算的開源軟件”?,F(xiàn)在的措施由四個(gè)子項(xiàng)目組成,包括:
- Hadoop Common:Hadoop Common形成Hadoop項(xiàng)目的核心,通過(guò)緊跟著的同胞項(xiàng)目提供所需的“管道裝置”。
- HDFS:Hadoop分布式文件系統(tǒng)(HDFS)是遍及計(jì)算集群負(fù)責(zé)復(fù)制和分配數(shù)據(jù)的存儲(chǔ)系統(tǒng)。
- MapReduce:MapReduce是開發(fā)人員用來(lái)編寫應(yīng)用的軟件架構(gòu),這些應(yīng)用處理那些存儲(chǔ)在HDFS中的數(shù)據(jù)。
- ZooKeeper:ZooKeeper負(fù)責(zé)協(xié)調(diào)配置數(shù)據(jù)、進(jìn)程同步和其它所有被分配應(yīng)用有效運(yùn)作所需的網(wǎng)絡(luò)相關(guān)服務(wù)。因此,雖然你確實(shí)會(huì)以單一檔案文件的形式下載Hadoop,記住,你正在下載的實(shí)際上是四個(gè)子項(xiàng)目,它們齊心協(xié)力來(lái)實(shí)施映射和歸算處理。
用Hadoop做實(shí)驗(yàn)
盡管Hadoop試圖解決的問(wèn)題本質(zhì)復(fù)雜,從運(yùn)用這個(gè)項(xiàng)目開始會(huì)非常容易。作為一個(gè)例子,我認(rèn)為用Hadoop來(lái)完成我“用PHP簡(jiǎn)化貝寶”一書中的詞頻率分析會(huì)很有趣。這個(gè)任務(wù)會(huì)仔細(xì)查看整本書(長(zhǎng)度大概在130頁(yè)左右),并且產(chǎn)生一個(gè)所有書中出現(xiàn)詞語(yǔ)的分組列表,連同其中每個(gè)詞出現(xiàn)在頻率。
安裝Hadoop之后,我用Calibre把我的書從PDF轉(zhuǎn)成文本文檔。Hadoop wiki還包含相似的指令,但由于比較近期的Hadoop配置過(guò)程改變,以前的資源包含略有更新的指令。
接下來(lái)我用下面的命令從臨時(shí)位置把這本書復(fù)制到Hadoop分布式文件系統(tǒng):
$ ./bin/hadoop dfs -copyFromLocal /tmp/easypaypalwithphp/ easypaypalwithphp
你可以通過(guò)運(yùn)用以下命令確認(rèn)復(fù)制成功:
$ ./bin/hadoop dfs -ls
drwxr-xr-x - hadoop supergroup 0 2011-01-04 12:48 /user/hadoop/easypaypalwithphp
緊接著,運(yùn)用和Hadoop一起打包的示例WordCount腳本來(lái)執(zhí)行詞頻率分析:
$ ./bin/hadoop jar hadoop-mapred-examples-0.21.0.jar wordcount \
> easypaypalwithphp easypaypalwithphp-output ...
11/01/04 12:51:38 INFO mapreduce.Job: map 0% reduce 0%
11/01/04 12:51:48 INFO mapreduce.Job: map 100% reduce 0%
11/01/04 12:51:57 INFO mapreduce.Job: map 100% reduce 100%
11/01/04 12:51:59 INFO mapreduce.Job: Job complete: job_201101041237_0002
11/01/04 12:51:59 INFO mapreduce.Job: Counters: 33
FileInputFormatCounters
BYTES_READ=274440
最后,你可以用以下命令查看輸出內(nèi)容:
$ ./bin/hadoop dfs -cat easypaypalwithphp-output/part-r-00000
...
Next 21
Next, 8
No 5
NoAutoBill 1
Norwegian 1
Not 2
Notably, 2
Note 5
Notice 6
Notification 13
...
示例WordCount頻率分析腳本非?;荆瑢?duì)書中文本里的每一列分配同等的重量,包括代碼。但是為了解析例如DocBook格式的文件并忽略代碼而修改腳本則會(huì)是很煩瑣的事情。無(wú)論如何,考慮一下你想要?jiǎng)?chuàng)建谷歌全球書籍詞頻統(tǒng)計(jì)器一類服務(wù)的情況,它查看超過(guò)520萬(wàn)本書的關(guān)鍵詞語(yǔ)。
【編輯推薦】