摘 要:本文論述了Hadoop的起源與發(fā)展,Hadoop是一個在集群上運(yùn)行大型數(shù)據(jù)庫處理應(yīng)用程序的開放式源代碼框架。它主要包括HDFS和MapReduce兩大套件,支持通過編程范例來創(chuàng)建并執(zhí)行的應(yīng)用程序,在很多大型網(wǎng)站上都已經(jīng)得到了應(yīng)用,可以說是目前最為廣泛應(yīng)用的開源云計(jì)算軟件平臺。但其發(fā)展時間較短,研究還不夠深入,還有較多值得改進(jìn)的地方。
關(guān)鍵詞:Hapdoop;HDFS;MapReduce;云計(jì)算
中圖分類號:TP311.13
1 Hadoop的起源與發(fā)展
隨著互聯(lián)網(wǎng)以及帶有各類傳感器的移動設(shè)備的普及,世界上的數(shù)字信息總量呈現(xiàn)爆炸性增長的態(tài)勢,人類已經(jīng)進(jìn)入大數(shù)據(jù)時代。海量數(shù)據(jù)的處理任務(wù)對現(xiàn)有的硬件系統(tǒng)提出了更高的要求。為增強(qiáng)系統(tǒng)處理數(shù)據(jù)的能力,可通過兩種途徑,一是“向上擴(kuò)展”,即增強(qiáng)單臺計(jì)算機(jī)的硬件配置以提升計(jì)算能力;二是“向外擴(kuò)展”,即用多臺計(jì)算機(jī)構(gòu)建集群,將數(shù)據(jù)處理任務(wù)按照某種調(diào)度方式分配給集群中的計(jì)算機(jī)。
向上擴(kuò)展方案具有明顯的局限性:高性能的多核心CPU級及大容量的高速存儲器價格昂貴;當(dāng)CPU核心到達(dá)一定數(shù)量時,協(xié)調(diào)各處理器的負(fù)載,以及維持?jǐn)?shù)據(jù)的一致性都十分困難,系統(tǒng)的穩(wěn)定性下降;磁盤的讀寫速度慢,若將數(shù)據(jù)放入單臺機(jī)器處理,CPU的計(jì)算能力將得不到充分發(fā)揮。于是,向外擴(kuò)展方案成為大數(shù)據(jù)處理的主流方式。
相比向上擴(kuò)展方案,向外擴(kuò)展方案的復(fù)雜度體現(xiàn)在軟件系統(tǒng)的設(shè)計(jì)上,Google在2003年和2004年先后發(fā)布了兩項(xiàng)關(guān)鍵技術(shù)—Google File System(GFS)與Mapreduce,GFS為分布式系統(tǒng)的文件管理提供了統(tǒng)一的用戶接口,使得用戶能夠像操作單臺電腦上的數(shù)據(jù)一樣操作分布在集群中的數(shù)據(jù);Mapreduce是一種計(jì)算模型,用戶只需將計(jì)算問題分解為映射(map)與歸約(reduce)兩個階段,mapreduce系統(tǒng)就能夠自動地將計(jì)算任務(wù)分派到集群中,實(shí)現(xiàn)高效的計(jì)算。GFS與Mapreduce的綜合使用能夠?qū)崿F(xiàn)一個高性能的大數(shù)據(jù)的平臺。
與此同時,工程師Doug把這兩項(xiàng)技術(shù)能夠應(yīng)用在他正在開發(fā)搜索引擎的項(xiàng)目,用Java語言實(shí)現(xiàn)了一個基于GFS和Mapreduce的開源平臺,即Hadoop的雛形。Hadoop出現(xiàn)后受到很大的關(guān)注,它也從Lucene的一個子項(xiàng)目迅速成為Apache開源基金的頂級項(xiàng)目。
2006年Yahoo雇傭了Doug并成為Hadoop項(xiàng)目最主要的支持者之一。Yahoo從建立Hadoop研究集群起便不斷的刷新著Hadoop的最大節(jié)點(diǎn)數(shù),直到超過上萬個節(jié)點(diǎn)。Hadoop處理數(shù)據(jù)的能力也在飛速的增加,2009年Yahoo已能在1400個節(jié)點(diǎn)的Hadoop集群上于59秒內(nèi)完成了500GB數(shù)據(jù)的排序。
2011年12月,Hadoop正式推出1.0.0版本,標(biāo)志著其已經(jīng)初具生產(chǎn)規(guī)模。Hadoop的用戶包括Facebook、Amazon、淘寶、百度在內(nèi)的許多大型互聯(lián)網(wǎng)公司。
2 Hadoop的組成
Hadoop發(fā)展至今已經(jīng)擁有了眾多的組件,其中最主要的兩個是Hadoop Distributed File System(HDFS)和Mapreduce。它們是Google的GFS和Mapreduce的直接實(shí)現(xiàn),是一對互補(bǔ)而截然不同的技術(shù)。
2.1 HDFS。HDFS是一個通過集群擴(kuò)展來存儲超大數(shù)據(jù)集的分布式文件系統(tǒng),集群中的每臺計(jì)算機(jī)都是一個節(jié)點(diǎn),HDFS該將數(shù)據(jù)存儲在不同的節(jié)點(diǎn)上,并為用戶提供統(tǒng)一的文件操作接口,其特征如下:(1)HDFS以64MB為最小存儲單位存儲數(shù)據(jù)。這比常用的許多文件系統(tǒng)要大得多。(2)HDFS針對吞吐量而不是延遲進(jìn)行優(yōu)化。(3)HDFS針對一次寫多次讀的情況進(jìn)行優(yōu)化。(4)每個存儲節(jié)點(diǎn)運(yùn)行著一個DataNode進(jìn)程來管理該節(jié)點(diǎn)上的數(shù)據(jù)塊,而這些進(jìn)程被集群中唯一的名為NameNode的進(jìn)程調(diào)度。(5)HDFS通過復(fù)制而不是物理冗余來應(yīng)對磁盤故障。每個組成文件的數(shù)據(jù)塊被存放在集群中不同的節(jié)點(diǎn)上。NameNode監(jiān)視著每一個DataNode的報(bào)告確保磁盤故障不會導(dǎo)致數(shù)據(jù)塊丟失。如果磁盤故障導(dǎo)致某個數(shù)據(jù)塊無法讀取,它會調(diào)度另一個存有該數(shù)據(jù)塊的節(jié)點(diǎn)來提供數(shù)據(jù)塊。
HDFS的基本工作方式:用戶(client)通過TCP/IP網(wǎng)絡(luò)訪問并操作HDFS,而底層Datanode中數(shù)據(jù)塊的存儲與交換,由Namenode自動管理。
2.2 Mapreduce。Mapreduce是一種大數(shù)據(jù)處理的解決方案,該方案借用了函數(shù)式編程(functional programming)中的map和reduce的思想,將它們組合成一個簡約而高效的并行編程范式。Mapreduce處理“鍵值”數(shù)據(jù),即每條數(shù)據(jù)由一個鍵(key)和一個值(value)組成,若輸入數(shù)據(jù)本身不具有這種結(jié)構(gòu),則通過某些方式將其轉(zhuǎn)換為鍵值結(jié)構(gòu),例如對于一個文本文件,鍵可以是某行的編號,值則是該行的內(nèi)容,這也是Hadoop默認(rèn)的文件格式轉(zhuǎn)換方式。
Mapreduce為兩個步驟:映射(map)與歸約(reduce)。實(shí)現(xiàn)map的函數(shù)稱為mapper,它將輸入的鍵值數(shù)據(jù)進(jìn)行某種變換,并輸出一組新的鍵值數(shù)據(jù)。實(shí)現(xiàn)reduce的函數(shù)稱為reducer,它將mapper的輸出中具有相同鍵的數(shù)據(jù)聚合在一起處理,并生成Mapreduce的最終輸出,輸出的格式同樣也是鍵值形式的,因?yàn)橐粋€完整的數(shù)據(jù)處理流程往往包含多次的map和reduce,一次reduce的輸出可能作為下一次map的輸入。
使用Mapreduce系統(tǒng)時,用戶只需提供算法的核心處理邏輯,主要包含:將輸入文件轉(zhuǎn)換為鍵值數(shù)據(jù)的函數(shù),對一條鍵值數(shù)據(jù)進(jìn)行轉(zhuǎn)換的mapper函數(shù),以及對一個鍵和它對應(yīng)的所有值進(jìn)行歸約的reducer函數(shù)等。用戶以Java語言的形式編寫這些函數(shù),并將其編譯,打包,最后上傳給Mapreduce系統(tǒng)自動處理。
Mapreduce系統(tǒng)由TaskTracker和JobTracker兩個部分組成。所有處理數(shù)據(jù)的節(jié)點(diǎn)都包含一個TaskTracker,每個TaskTracker都負(fù)責(zé)處理一部分的map或reduce任務(wù)。JobTracker負(fù)責(zé)管理并監(jiān)控所有TaskTracker的運(yùn)行情況,并在它們出錯時將未完成的任務(wù)發(fā)送給新的TaskTracker執(zhí)行。
Mapreduce的工作流程可以用一個例子說明,如圖1展示了一個簡單的單詞計(jì)數(shù)功能在Mapreduce上的執(zhí)行過程:
圖1 單詞計(jì)數(shù)功能在Mapreduce上的執(zhí)行過程
圖中,原始的鍵值數(shù)據(jù)是“行號-行內(nèi)容”,通過mapper處理,它被轉(zhuǎn)換為“單詞-1”,中間的shuffling過程將鍵相同的所有條目聚合在一起,送入同一個reducer處理,在reduce步驟中,所有鍵(單詞)相同的條目被累加在一起,形成最終的輸出。
2.3 其它擴(kuò)展功能。除了HDFS和Mapreduce這兩個核心套件之外,Hadoop平臺還包括其它的擴(kuò)展擴(kuò)展套件,它們共同組成了一個Hadoop生態(tài)系統(tǒng)。其中,最重要的擴(kuò)展套件包括容納PB數(shù)據(jù)量的分布式數(shù)據(jù)庫HBase、數(shù)據(jù)存儲套件Hive和機(jī)器學(xué)習(xí)與智能推薦系統(tǒng)套件Mahout。
3 Hadoop的不足和改進(jìn)
Hadoop的架構(gòu)設(shè)計(jì)使其具有非常好的靈活性。然而,Hadoop并非在任何情況下都是最優(yōu)選擇,原因如下:1.Hadoop是一個批處理系統(tǒng),當(dāng)一個任務(wù)由Hadoop執(zhí)行時,必須等到所有結(jié)果都計(jì)算出來才能停止,因此Hadoop不能勝任一些需要低延遲的任務(wù),如實(shí)時系統(tǒng)。2.Hadoop在配置任務(wù)時的花銷非常大,如果數(shù)據(jù)集很小,任務(wù)配置的時間甚至?xí)^運(yùn)行時間。所以Hadoop不適合小數(shù)據(jù)集的數(shù)據(jù)分析。3.Hadoop處理大量小文件的能力弱。小文件指的是大小比HDFS數(shù)據(jù)塊大小(默認(rèn)64M)小得多的文件。如果在HDFS中存儲大量的小文件,每一個文件都會對應(yīng)一個數(shù)據(jù)塊,系統(tǒng)要消耗Namenode大量的內(nèi)存來保存這些數(shù)據(jù)塊信息。4.Hadoop的開源性是一把雙刃劍,技術(shù)保密和技術(shù)支持都是需要考慮的因素。
參考文獻(xiàn):
[1]Tom White.Hadoop權(quán)威指南(第二版)[M].北京:清華大學(xué)出版社,2011.
[2]張密密.MapReduce模型在Hadoop實(shí)現(xiàn)中的性能分析及改進(jìn)優(yōu)化[D].成都:電子科技大學(xué),2010.
[3]徐文強(qiáng).基于HDFS的云存儲系統(tǒng)研究[D].上海:上海交通大學(xué),2011.
作者簡介:蔡靜(1982.05-),女,碩士,研究方向:計(jì)算機(jī)應(yīng)用、模式識別。
作者單位:武昌工學(xué)院 信息工程系,武漢 430065