探討云計(jì)算中大數(shù)據(jù)的MapReduce處理方法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
隨著互聯(lián)網(wǎng)的不斷發(fā)展,云計(jì)算也逐步成為各行各業(yè)的 熱門名詞了。云計(jì)算作為一項(xiàng)劃時(shí)代的技術(shù),擁有超級計(jì)算 能力和處理能力,用以應(yīng)對用戶對網(wǎng)絡(luò)資源需求和利用的日益 增大。數(shù)據(jù)需求日益增長和積累標(biāo)志著大數(shù)據(jù)時(shí)代已經(jīng)到來。 大數(shù)據(jù)的出現(xiàn)引起了各行各界專業(yè)人士的密切關(guān)注,因此大數(shù) 據(jù)的管理技術(shù)也應(yīng)運(yùn)而生。在學(xué)術(shù)界中,專家們紛紛發(fā)布論文 來定義大數(shù)據(jù),探討大數(shù)據(jù)的處理方法及指出其所面臨的挑 戰(zhàn)。作為大數(shù)據(jù)處理的領(lǐng)頭羊,Google公司于2004年提出的 MapReduce編程模型受到了大眾的廣泛關(guān)注。
1云計(jì)算技術(shù)簡介
云計(jì)算是當(dāng)今時(shí)代IT行業(yè)的熱點(diǎn)話題,對它的定義各 行各界的專業(yè)人士紛紛提出自己的看法。云計(jì)算既不是產(chǎn) 品也不是技術(shù),而是一種產(chǎn)生和獲取計(jì)算能力方式的統(tǒng)稱。 Wikipedia網(wǎng)站上給出的云計(jì)算(Cloud Computing)的定義是: 一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過這種方式,共享的軟硬件 資源和信息可以按需求提供給計(jì)算機(jī)和其他設(shè)備。
云計(jì)算的主要特點(diǎn)包含超大規(guī)模、虛擬化、高可靠 性、高可擴(kuò)展性和按需服務(wù)。主要形式有基礎(chǔ)設(shè)施即服務(wù) (Infrastructure as a Service,IaaS)即提供給用戶的遠(yuǎn)程登錄終 端界面(虛擬服務(wù)器)或者Web Service接口,平臺即服務(wù) (Platform as a Service,PaaS)即提供給用戶的數(shù)據(jù)庫連接串口 或者中間件部署界面,或者是應(yīng)用的部署管理界面,軟件即服 務(wù)(Software as a Service,SaaS)即提供給用戶訪問應(yīng)用的客戶 端或者Web界面。
2大數(shù)據(jù)
2.1大數(shù)據(jù)的定義
對于大數(shù)據(jù),專家們目前并沒有給出一個(gè)確切的定義。 Gartner分析師道格-萊尼(Doug Laney)認(rèn)為:大數(shù)據(jù)需滿 足三個(gè)特點(diǎn):規(guī)模性(Volume)、多樣性(Variety)和高速性 (Velocity),合稱3V。2012年Gartner修改了對大數(shù)據(jù)的定義: “大數(shù)據(jù)是大量、高速,及/或多變的信息資產(chǎn),他需要新型 的處理方式去促成更強(qiáng)的決策能力、洞察力與優(yōu)化處理。”還 有提出4 V定義的,即在3V基礎(chǔ)上增加一個(gè)新的特性一一真 實(shí)性(Veracity)。
2.2大數(shù)據(jù)的出現(xiàn)
互聯(lián)網(wǎng)日益發(fā)達(dá),人們需要的資源或數(shù)據(jù)量也越來越往 上攀升。數(shù)據(jù)庫作為管理數(shù)據(jù)的主要方式也滿足不了用戶們的 需求了。從開始數(shù)據(jù)庫的出現(xiàn)讓用戶管理數(shù)據(jù)的復(fù)雜度降低, 到Web 2.0時(shí)代的數(shù)據(jù)爆炸一一主要是新型的社交網(wǎng)絡(luò)微博、 微信等的快速發(fā)展和蘋果公司和安卓公司的智能手機(jī)、平板電 腦等新型移動設(shè)備的出現(xiàn),再到無處不在的傳感器設(shè)備的使 用,因?yàn)檫@些設(shè)備無時(shí)無刻不產(chǎn)生新的數(shù)據(jù),從而導(dǎo)致大數(shù) 據(jù)的產(chǎn)生。
2.3大數(shù)據(jù)的處理流程
與以往的傳統(tǒng)數(shù)據(jù)處理流程相比,大數(shù)據(jù)的基本處理流 程基本一樣,主要區(qū)別在于:大數(shù)據(jù)包含的信息量大,節(jié)點(diǎn)多 且屬于非結(jié)構(gòu)化的數(shù)據(jù),因此在每個(gè)處理環(huán)節(jié)中都需要采用 MapReduce,Dryad等方式進(jìn)行并行處理?;玖鞒倘鐖D1 所示。
大數(shù)據(jù)中的 3V 特性包含著多樣性,這意味著數(shù)據(jù)來源廣泛、種類多,也說明數(shù)據(jù)采集需要利用多個(gè)數(shù)據(jù)庫來接收數(shù)據(jù)。采集之后就是數(shù)據(jù)預(yù)處理,即需要對采集到的海量數(shù)據(jù)進(jìn)行分析,保證數(shù)據(jù)的質(zhì)量和可信度等。數(shù)據(jù)處理中的分析環(huán)節(jié)是大數(shù)據(jù)處理的核心部分,涉及到的數(shù)據(jù)量較大,系統(tǒng)資源利用率高,需要利用到分布式數(shù)據(jù)庫來對采集到的海量數(shù)據(jù)進(jìn)行進(jìn)一步分析和分類匯總,進(jìn)而滿足用戶的常見的分析需求。之后是數(shù)據(jù)挖掘,即主要是在現(xiàn)有采集到的數(shù)據(jù)用來進(jìn)行基于各種算法的技術(shù),從而起到預(yù)測的效果,實(shí)現(xiàn)一些高級別的數(shù)據(jù)分析需求。該過程的特點(diǎn)是數(shù)據(jù)挖掘的算法雖然復(fù)雜,計(jì)算量和數(shù)據(jù)量大,但算法的準(zhǔn)確率不再是大數(shù)據(jù)的最主要的指標(biāo)了。最后是結(jié)果展現(xiàn),換而言之,就是對數(shù)據(jù)分析后得出的結(jié)果展示給用戶參考,往往用戶也更關(guān)心分析后的結(jié)果。最常用的的方法就是利用可視化技術(shù),該技術(shù)也成功地被科學(xué)與工程計(jì)算領(lǐng)域采用?,F(xiàn)今常被采用的可視化技術(shù)有標(biāo)簽云 (Tag Cloud)、歷史流 (History Flow)、空間信息流 (Spatial Information Flow)。
3 MapReduce 模型
MapReduce 模型是一種云計(jì)算中的并行計(jì)算模型的主要研究對象。它通過基于云平臺中的大數(shù)據(jù)進(jìn)行挖掘,從而獲取網(wǎng)頁相關(guān)數(shù)據(jù)對其研究得出結(jié)果。完整的 MapReduce 執(zhí)行過程如圖 2 所示。
圖 2 中,MapReduce 模 型 有 2 個(gè) 函 數(shù) :Map 函 數(shù) 和Reduce 函數(shù)。MapReduce 模型首先獲取用戶需處理的數(shù)據(jù)進(jìn)行 split,然后分別傳送到 Map worker 進(jìn)行處理。Map worker從輸入中獲得 <key,value> 對集合,然后 Map 函數(shù)執(zhí)行該集合獲得中間結(jié)果并存入本地硬盤。Reduce worker 先從本地硬盤上獲取數(shù)據(jù),然后對 <key,value> 中的 key 值進(jìn)行排序。排序之后 Reduce 函數(shù)對這些排序好的對集合進(jìn)行處理并輸出最終結(jié)果。
4 MapReduce 的優(yōu)點(diǎn)
MapReduce 編程模型能夠在云計(jì)算的大數(shù)據(jù)處理一直處于領(lǐng)先地位,因?yàn)?MapReduce 實(shí)行的是分布式并行程序,通過編寫簡單高效的代碼來解決復(fù)雜的工作。從圖 2 可以看到,MapReduce 有著非常強(qiáng)大又簡單的接口 Map 函數(shù)和 Reduce函數(shù)。
MapReduce 模型有著高度抽象性,程序員不需要關(guān)心大數(shù)據(jù)的具體細(xì)節(jié),只需要實(shí)現(xiàn) Map 函數(shù)和 Reduce 函數(shù)。在圖 2 中,每一次 MapReduce 過程中,Map 任務(wù)之間是并行的,Reduce 任務(wù)之間也是并行的,但兩者之間是串行的,并且和具體的節(jié)點(diǎn)數(shù)目無關(guān),節(jié)點(diǎn)的增加或者減少都不會影響程序的執(zhí)行,即 MapReduce 模型具有可擴(kuò)展性、可靠性。同時(shí)在傳統(tǒng)并行編程模型下,包含計(jì)算任務(wù),數(shù)據(jù)同步和通信,對應(yīng)于MapReduce 模型中的 Map 函數(shù),Reduce 函數(shù)和 <key,value>。圖 3 所示是傳統(tǒng)并行程序與 MapReduce 關(guān)系的對應(yīng)圖。
Hadoop 是 Appach 用 java 實(shí)現(xiàn)的開源軟件平臺,可實(shí)現(xiàn)MapReduce 模型。并可對大數(shù)據(jù)進(jìn)行分布式計(jì)算,而且采用的編程語言種類繁多,如 Python,Java,C 等。下面是一個(gè)簡單的統(tǒng)計(jì)詞頻的 MapReduce 函數(shù),可以看出,MapReduce的核心代碼非常簡單且易懂 :
map(String key, String value):
for each word t in value:
EmitIntermediate(t, "1");
reduce(String key, Iterator values):
int result = 0;
for each s in values:
result += ParseInt(s);
Emit(AsString(result));
在該例中,Map 函數(shù)中的 key 是文件名,value 為文件的內(nèi)容,Map 函數(shù)逐個(gè)遍歷單詞,當(dāng)遇到一個(gè)單詞 t,就相對產(chǎn)生一個(gè)中間鍵值對<t,'T>,意味著單詞t的數(shù)目加1 ; 然后MapReduce模型將鍵相同的鍵值對傳給Reduce函數(shù), Reduce函數(shù)接收到v,值就是以“1”的一串,個(gè)數(shù)就是單詞 v的數(shù)目。最后這些單詞的數(shù)目會被寫到用戶定義的位置,存 儲在底層的分布式存儲系統(tǒng)(GFS)。
MapReduce模型的不足
MapReduce模型適用于并行計(jì)算,為大數(shù)據(jù)的處理而設(shè) 計(jì)開發(fā)的。但MapReduce模型也存在許多不足之處。
在大數(shù)據(jù)密集應(yīng)用的編程領(lǐng)域,傳統(tǒng)的MapReduce模型 中的Map的輸入源采用的是DFS,是相對的靜態(tài)數(shù)據(jù),并非 是一個(gè)最優(yōu)的實(shí)現(xiàn),而是使用了蠻力而非索引技術(shù),同時(shí)缺 乏了數(shù)據(jù)庫管理系統(tǒng)(DBMS)的大多數(shù)特性。比如DBMS中 的Schema的重要性,MapReduce模型缺少這樣的預(yù)防垃圾 數(shù)據(jù)機(jī)制。
從圖2中可以看出:MapReduce模型在處理大數(shù)據(jù)時(shí), 由Map函數(shù)產(chǎn)生大量的中間數(shù)據(jù),這些大量的中間數(shù)據(jù)同時(shí) 存在著數(shù)據(jù)不均衡的特性,比如key過于聚集或key值單一。 key過于聚集即不同key的個(gè)數(shù)雖然多,但經(jīng)過映射后,過于 聚集在一起,key值單一即不同key的個(gè)數(shù)少。
同時(shí),MapReduce模型也存在著性能問題。例如N個(gè) Map實(shí)例產(chǎn)生M個(gè)輸出文件,每個(gè)最后由不同的Reduce 實(shí)例處理,這些中間結(jié)果數(shù)據(jù)都會輸出到運(yùn)行Map函數(shù)機(jī) 制的本地硬盤。倘若N=1 000, M=500, Map階段產(chǎn)生了 N*M=500 000個(gè)中間數(shù)據(jù)或文件。而當(dāng)Reduce階段開始時(shí), 500個(gè)Reduce實(shí)例中,每個(gè)都需要讀入1 000個(gè)數(shù)據(jù)或者文件, 并用類似FTP協(xié)議把它要的輸入文件從Map實(shí)例運(yùn)行的節(jié)點(diǎn) 上pull取過來。當(dāng)同時(shí)有100的Reduce實(shí)例運(yùn)行,那么2個(gè) 或2個(gè)以上的Reduce實(shí)例同時(shí)訪問同一個(gè)Map節(jié)點(diǎn)來獲取輸 入文件,將導(dǎo)致了大量的硬盤查找,有效的硬盤運(yùn)轉(zhuǎn)速度至 少降低20%。
在上例中,N M的值都是普通數(shù)據(jù)(< 10 000), MapReduce模型針對的是大數(shù)據(jù),N, M的參數(shù)遠(yuǎn)遠(yuǎn)要大于上 面的數(shù)值,而中間結(jié)果數(shù)據(jù)過大的話,將導(dǎo)致Reduce階段的 數(shù)據(jù)傾斜。Reduce階段的數(shù)據(jù)傾斜可能帶來有的Reduce任 務(wù)處理的數(shù)據(jù)多,而有的Reduce任務(wù)處理的數(shù)據(jù)少,甚至沒有。 最嚴(yán)重的是,有的Reduce任務(wù)處理的數(shù)據(jù)超出了本地可用存 儲空間,導(dǎo)致整個(gè)MapReduce任務(wù)失敗。
MapReduce模型的改進(jìn)
MapReduce模型的不足說到底就是MapReduce模型的性能問題,Map/Reduce 的程序效率問題。Google 公司的Hadoop 系統(tǒng)采用了 Combiner 來提高 Map/Reduce 程序效率。Combiner 主要削減了 Map 階段的輸出以減少中間結(jié)果數(shù)據(jù),進(jìn)而為網(wǎng)絡(luò)帶寬和 Reduce 階段減負(fù)。數(shù)據(jù)格式轉(zhuǎn)換格式如下:
Map: (K1, V1) → list(K2,V2)
Combine: (K2, list(V2)) → list(K3, V3)
Reduce: (K3, list(V3)) → list(K4, V4)
插入Combiner 后,MapReduce 的數(shù)據(jù)流如圖 4 所示。
實(shí)際上,Combiner 實(shí)例在 MapReduce 過 程中是可選的。但是,一個(gè) Combiner 只能處理一個(gè)節(jié)點(diǎn)中的輸出,這和Reduce 階段有一些區(qū)別,Reduce 處理的是中間結(jié)果數(shù)據(jù)。
7 總 結(jié)
隨著云計(jì)算的快速發(fā)展,數(shù)據(jù)和信息量都呈爆炸型增長,大數(shù)據(jù)也就走入大眾的視線。大數(shù)據(jù)的到來方便了用戶,但大數(shù)據(jù)的處理方法也面臨著挑戰(zhàn)。本文介紹了云計(jì)算和大數(shù)據(jù)的基本概念,主要探討了 Google 公司的 MapReduce 模型的優(yōu)缺點(diǎn)?,F(xiàn)今國內(nèi)外對大數(shù)據(jù)的相關(guān)研究也取得了一定的成果,Microsoft 公司也針對云計(jì)算服務(wù)器中的大數(shù)據(jù)研發(fā)了Dryad 模型,但就 MapReduce 模型來說,在大數(shù)據(jù)的處理方法方面存在著極大的挑戰(zhàn)。
20211222_61c338596ce76__探討云計(jì)算中大數(shù)據(jù)的MapReduce處理方法