丁智 林治
MapReduce編程模型、方法及應用綜述
丁智,林治
(揚州市職業(yè)大學 信息工程學院,江蘇 揚州 225009)
摘要:近年來,云計算作為一種新的互聯網應用模式正在改變人們獲取信息和服務的方式。MapReduce作為大規(guī)模數據處理的分布式計算模型,吸引了來自學術界和工業(yè)界的廣泛關注,并在云計算的發(fā)展中起著決定性的作用。該文介紹了MapReduce編程模型及運行機制,并給出了基于MapReduce的一個典型應用。另外,針對MapReduce技術存在的問題提出應對措施,給MapReduce的研究人員及用戶提供一定的參考。
關鍵詞:MapReduce;云計算;云應用
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)30-7060-05
Review on MapReduce Programming Model, Method and Application
DING Zhi
(Institute of Information Engineering, Yangzhou Polytechnic College, Yangzhou 225009, China)
Abstract: In recent years, cloud computing as a new Internet application pattern is changing the way people access information and services. MapReduce, as a large-scale data processing and distributed computing model, attracts wide attention from academia and industry, and plays a decisive role in the development of cloud computing. This paper describes the MapReduce programming model and operation mechanism, and gives a typical application based on MapReduce. On this basis, several challenges and ideas are proposed as references to researchers and users.
Key words: MapReduce; cloud computing; cloud application
隨著云計算技術[1]的快速發(fā)展,云計算應用不斷增多,有效提升用戶的大規(guī)模數據處理能力和服務體驗。MapReduce 編程模型作為云計算的核心技術之一,實質上是一種分布式編程模型,它的設計初衷與大規(guī)模數據處理有關。目前大規(guī)模數據處理常用的方法是并行計算,它將運行于大規(guī)模集群上的并行計算抽象成Map和Reduce兩個過程,抽象過程簡單,但顯示出驚人的計算能力,通過從復雜的實現細節(jié)中提取簡單的業(yè)務處理邏輯,提供了一系列簡單強大的接口,通過這些接口大規(guī)模計算自發(fā)的并行和分布執(zhí)行,使得開發(fā)人員不需要并行計算或者分布式的開發(fā)經驗就可以高效的利用分布式資源。MapReduce分布式編程模型被Yahoo、Amazon、淘寶等知名IT企業(yè)廣泛應用于日志分析、廣告計算、科研實驗和搜索等。同時,中科院、清華大學國內知名大學也進行了深入的研究[2]。
1 MapReduce相關技術
1.1 MapReduce概述
Google 每次搜索的后臺數據處理量都是驚人的,而且隨著時間推移,數據規(guī)模越來越大,計算量也隨之增大[3]。開發(fā)人員編寫大量程序用于數據挖掘,如爬蟲、Web 請求、查詢請求等,這些操作都是基于海量的原始數據,如何有效利用海量數據是一筆巨大的財富。同時,處理海量不同類型的派生數據的成本和時間是受限的。大規(guī)模計算雖然在概念上容易理解,但實際操作隨著數據量的增長復雜度呈指數級增加,因此,需要分給大量的計算機共同執(zhí)行才能在有限的時間內完成[4]。如何實現并行計算,分發(fā)數據,容錯和調度等操作,原本看似容易的計算變得異常困難,需要大量復雜的編程來實現,又由于簡單的計算在大規(guī)模數據時會變得復雜且難以控制。為了更加有效的處理此類問題,Google 提出了MapReduce 編程模型[5],MapReduce 借鑒了函數式程序設計語言的設計思想,把處理并發(fā)、容錯、數據分布等細節(jié)抽象到一個庫里面,可以很好地處理并行化、容錯、數據分布、負載均衡等操作的融合。
1.2編程模型
MapReduce編程模型[6]是根據這個框架提供的兩個編程接口Map和Reduce來命名的,將數據處理分為Map和Reduce兩個階段,大大簡化數據處理過程,如圖1所示。一系列key/value作為每個階段的輸入和輸出,key/value類型由用戶自行確定,同時還需要指定Map函數和Reduce函數,在Map階段,程序處理大量的輸入數據并得到一系列的key/value,就是一個key名稱與一個value相對應。而這些由Map階段得到的所有key/value,在Reduce階段中,會根據具體的Reduce方法,把與同一key對應的所有value進行一個自定義的聚合運算,從而得到一個最終結果。
圖1 MapReduce模型
1.3 MapReduce 關鍵特性
1.3.1 推測執(zhí)行
推測執(zhí)行是指某個節(jié)點任務運行比預期慢的時候,檢測執(zhí)行慢的任務,并啟動一個相同的任務作為備份。推測執(zhí)行在一個作業(yè)的所有任務啟動完后才啟動推測執(zhí)行的任務,并且只針對那些已經運行一段時間(至少一分鐘)且比作業(yè)中其他任務平均進度慢的任務。一個任務完成后,任何正在運行的重復任務都將被中止。
1.3.2 容錯機制
MapReduce 是被設計用于成千上百臺機器上的海量數據處理,因此,它的函數庫還要考慮機器故障的容錯問題??刂乒?jié)點會定時ping每個工作機器,如果在一定時間內沒有得到該機器響應,則可認為該機器失效。主控制程序需要把所有節(jié)點上的任務重新執(zhí)行一次,才能完成MapReduce 操作??蛻舳丝蓹z測到控制點失效,并根據需要重啟MapReduce操作。
1.3.3 存儲本地化
在MapReduce分布式計算過程中,網絡資源相對稀缺。MapReduce控制節(jié)點有輸入文件組的位置信息,并嘗試在包含相應輸入數據塊的機器上分配Map任務。如果不能分配,它就嘗試分配Map任務到盡量靠近這個任務的輸入數據的機架上執(zhí)行,還是不能的話,就從不同的機架上檢索數據。當在一個足夠大的集群上運行MapReduce操作的時候,大部分輸入數據都是在本地機器讀取的,這一過程并不占用網絡帶寬。
1.3.4 Combine(本地化Reduce)
Combine操作對map映射操作后產生的中間結果key/value進行初步處理,使之按實際的Reduce要求有序,能有效提高后續(xù)全局Reduce操作的速度。一般情況下,用戶都會提供一個自定義的Combiner類,這樣Map過程所產生的中間結果key/value不會馬上寫到輸出,而會在被收集到列表中,當緩沖區(qū)內的key/value達到一定數量時,緩沖區(qū)內數據會被清空轉移到Combiner類的Reduce方法中,最后每個key對應的value列表將會以key/value的形式輸出。
2 MapReduce實現
2.1 運行機制
MapReduce的工作流程如圖2所示,整個模型的最上層有四個實體[7]:客戶端負責向MapReduce框架提交作業(yè);作業(yè)追蹤器全權負責調度作業(yè)的運行,作業(yè)追蹤器是一個java應用程序;任務追蹤器,作業(yè)被分成多個切片,任務追蹤器負責運行輸入切片數據,任務追蹤器是一個Java應用程序,負責具體任務的執(zhí)行;分布式文件系統(tǒng)(HDFS)提供存儲功能,用于向所有的節(jié)點共享作業(yè)所需的資源。
圖2 MapReduece工作流程
MapReduce作業(yè)提交后,runJob()方法會調用submitJob()方法并將作業(yè)提交給作業(yè)追蹤器。然后runJob()方法不斷循環(huán)了解作業(yè)的實時運行情況(步驟1) ,如果發(fā)現作業(yè)運行狀態(tài)有更新,便把狀態(tài)報告給作業(yè)追蹤器。通過JobTracker.getNewJobId()方法向作業(yè)追蹤器請求當前作業(yè)的ID(步驟2) ;在獲取各個路徑信息時會檢查作業(yè)的對應路徑。如果輸入輸出目錄不存在,會將錯誤信息返回給MapReduce程序。計算作業(yè)的輸出劃分,并將劃分信息寫入分塊文件,如果無法寫入就返回錯誤信息給MapReduce程序;將運行作業(yè)所需的資源,包括作業(yè)的JAR文件、配置文件和計算所得的輸入劃分,復制到作業(yè)對用的分布式文件系統(tǒng)HDFS中。(步驟3) ;通過調用JobTracker.submitJob()方法來真正提交作業(yè),并告知作業(yè)追蹤器準備執(zhí)行作業(yè)(步驟4) ;作業(yè)調用JobTracker.submitJob()方法后,作業(yè)追蹤器會將此調用放入內部的變量中,然后采用先進先出方式進行調度,當作業(yè)被調度執(zhí)行時,作業(yè)追蹤器會創(chuàng)建一個代表該正在運行的作業(yè)的對象,并在對象中封裝任務和記錄信息,用于跟蹤任務的狀態(tài)和進程(步驟5) ;作業(yè)追蹤器首先從HDFS中獲取作業(yè)對應的分塊信息(步驟6) ,為分配Map任務做準備,然后創(chuàng)建并初始化Map和Reduce任務,最后創(chuàng)建兩個任務初始化Map和Reduce任務,同時指定任務的ID;任務追蹤器作為單獨的JVM會執(zhí)行一個簡單的循環(huán),主要任務是每隔一段時間向作業(yè)追蹤器發(fā)送心跳(heartbeat),告訴作業(yè)追蹤器此任務追蹤器是否存活是否準備執(zhí)行新任務,如果有待分配的任務,作業(yè)追蹤器會為任務追蹤器分配一個任務,并將分配信息在心跳通信的返回值中返回給任務追蹤器,任務追蹤器從心跳的返回值中得知自己要做的事情(步驟7) ;在任務追蹤器分配到新任務后,就要在本地執(zhí)行任務。首先,通過localizeJob()方法完成任務本地化(步驟8) ;然后,launchTask()方法會為任務創(chuàng)建本地工作目錄,并把JAR文件中的內容解壓到這個文件夾下(步驟9) ;最后,啟動TaskRunner來執(zhí)行任務;最后,TaskRunner又會啟動一個新的JVM來運行每個任務(步驟10) ;所有任務追蹤器任務的執(zhí)行進度都會匯總到作業(yè)追蹤器,當作業(yè)追蹤器接收到最后一個任務完成的通知時,把作業(yè)狀態(tài)設置為成功,用戶也會被及時告知作業(yè)完成。
2.2 應用實例
為了更清楚地描述MapReduce編程模型,圖3給出了計算每年的最高氣溫[8]的程序偽代碼。在圖3所示的map函數中,首先提取年份和氣溫信息,生成Key-Value對形式,并將它們發(fā)送到臨時空間,再通過MapReduce中間處理過程,這一處理過程中根據Key對Key-Value對進行分組,使每一年份后緊跟一系列氣溫數據。而每一個Reduce函數則只需遍歷整個列表并找出最大的數,這個結果就是每年的最高氣溫[9]。
[1:map(String input_key, String input_value): \&2: // input_key: document name\&3: // input_value: document contents\&4: for each year y and temperature t in input_value:\&5: EmitIntermediate(y, t);\&6:reduce(String output_key, Interator intermediate_values):\&7: // output_key: year\&8: // intermediate_values: a list of temperature\&9: int maxValue = Interger.MIN_VALUE;\&10: for each t in intermediate_values:\&11: maxValue =Math.max(t);\&12: Emit(year, maxValue);\&]
圖3 基于MapReduce的每年最高氣溫程序舉例
MapReduce執(zhí)行過程分為Map和Reduce兩個階段,如圖4所示。Map和Reduce之間包含分類階段,主要作用是將相同的key的中間結果交給同一個Reduce函數執(zhí)行。
圖4 MapReduce處理的執(zhí)行過程
3 MapReduce應用研究現狀
自Google MapReduce發(fā)表以來,業(yè)界和學術界掀起了MapReduce研究的熱潮[10]。Tyson等對數據傳輸進行了改進,使MapReduce內部數據流水線傳輸,這種改進的MapReduce框架可以減少任務完成時間和提高系統(tǒng)的可用性,其他研究機構也對MapReduce的應用進行了深入的探討和開發(fā),下面針對大規(guī)模數據處理、并行計算、大規(guī)模數據的統(tǒng)計分析、數據挖掘、信息檢索等進行分類闡述。
在大規(guī)模數據處理方面,Jaliya等利用MapReduce對高能物理數據進行分析,實現了基于MapReduce的Kmeans聚類,最后提出了數據流式處理模型CGL-MapReduce,有利于基于MapReduce的數據密集型科學計算;Michal等在語義標注解決方案Ontea的基礎上,引入MapReduce架構對大規(guī)模網頁進行自動語義標注,實驗取得很好的性能表現,這種模式還可以用于網頁地圖的地理信息標注;Liu等提出了基于MapReduce的分布式非負矩陣分解用于分析網頁二元數據,結果表明基于MapReduce分解有數十億非零值的一億個矩陣是可行的;Gaggero等利用MapReduce處理生物信息學數據,分別是計算相對簡單的大規(guī)模數據,和數據量稍小的復雜計算,結果都是可行的。
在并行計算方面,Andrew等提出基于MapReduce的并行粒子群優(yōu)化MRPSO,結果表明粒子群優(yōu)化可以很好的適應MapReduce編程模型;Daniel等提出了基于MapReduce的XML處理管道并行化,通過一些新的策略把XML管道編譯到MapReduce網絡中,結果表明XML管道的執(zhí)行時間大大縮短; Jin等提出了基于MapReduce的兩層reduce階段的模型MRPGA,可以自動并行化遺傳算法,為迭代類算法使用MapReduce有了新的認識。
在數據統(tǒng)計分析方面, Abouzeid等提出的HadoopDB通過結合MapReduce和并行數據庫系統(tǒng)用于大規(guī)模數據處理,利用MapReduce的可擴展性、容錯性和靈活性的優(yōu)勢,再利用并行數據庫性能和效率上的優(yōu)勢;Facebook的數據倉庫Hive、Yahoo的Pig和Turn的Cheetah都是運行在Hadoop上開源系統(tǒng),支持類SQL的數據查詢,類SQL語言有HiveQL和Pig Latin,它們的編譯器會把類SQL的數據分析請求轉換為一系列經過優(yōu)化處理的MapReduce運算,來簡化MapReduce處理大規(guī)模數據的編程。
在數據挖掘方面,Liu等提出了基于MapReduce的BP神經網絡MBNN用來處理大規(guī)模移動設備數據的聚類,還引入Adaboosting機制改善聚類性能; Zhao等提出基于MapReduce的并行Kmeans聚類算法,通過speedup, scaleup, sizeup來評估性能,結果顯示可以在普通計算機上有效地處理大數據集; White等把MapReduce用于圖像處理,包括分類器訓練、背景提取和圖像配準等,為MapReduce用于可視化數據處理奠定了基礎。
在國內,基于Mapreduce的研究基本上可以分為高性能MapReduce、基于MapReduce框架的優(yōu)化和基于MapReduce的數據挖掘算法;復旦大學把MapReduce用于具有重要現實意義的科學計算,并對科學計算中遇到的一些典型問題提出相應的優(yōu)化方案;中國科學技術大學提出的HPMR(High Performance MapReduce)是專為高性能計算,尤其是并行科學計算而設計開發(fā)的,通過MapReduce模型隱藏了與并行有關的繁瑣技術細節(jié),程序員只需編寫計算代碼,所有與數據組織、任務并行和通信有關的功能都交給HPMR的運行時系統(tǒng)去完成;浙江大學和中山大學等對基于MapReduce的數據挖掘算法進行了研究;上海交通大學和北京郵電大學等對MapReduce框架進行了改進,實現MapReduce框架的通用性或用于具體的某一方面的數據處理。
4 MapReduce 挑戰(zhàn)與對策
目前,對于云計算中研究基本集中在MapReduce模型改進,在MapReduce模型總體架構的研究較少,而MapReduce編程模型的瓶頸主要在于架構上過多地依賴于任務節(jié)點,從而導致整個系統(tǒng)的穩(wěn)定性和可用性受到限制[11]。目前 MapReduce 僅適用于內部松耦合且可以高度并行化的應用程序,如何使這種模式高效的運行在緊耦合應用程序的情況,是這種編程模式以后的發(fā)展趨勢。表1給出了主要存在的一些挑戰(zhàn)問題及克服相應問題的對策。
表1 MapReduce的挑戰(zhàn)及對策
[挑戰(zhàn)\&主要內容\&改進\&單jobtracker (任務管理節(jié)點)\&架構上過多地依賴于jobtracker節(jié)點的執(zhí)行效率,從而受限于jobtracker節(jié)點\&多jobtracker;
把一些處理任務轉移到tasktracker節(jié)點\&不適合處理緊耦合應用\&Map和Reduce任務之間都不能通信,更不用說兩種任務相互通信,不適合處理緊耦合的科學計算\&Map任務、Reduce任務和Map任務、Reduce任務之間可以協同處理\&不適合處理大量小文件\&小文件產生的元數據會占用主節(jié)點的大量內存,過量時主節(jié)點會遇到內存瓶頸問題;如果訪問大量小文件,需要不斷的從一個jobtracker跳到另一個tasktracker,處理大量小文件速度遠遠小于處理同等大小的大文件的速度。其次,每一個小文件要占用一個任務,而任務啟動將耗費大量時間甚至大部分時間都耗費在啟動任務和釋放任務上。\&把小文件合并成大文件再處理,比如Sequencefile,Mapfile\&蠻力算法\&MapReduce沒有索引,在處理存取操作時使用蠻力算法,效率很低,DBMS使用散列或者B樹索引加速數據存取。\&應用索引策略,如B樹,散列,多級索引等\&不適合實時應用\&一個主搜索引擎可能每秒鐘處理成千上萬次查詢,用戶需要低延遲、高可靠的反饋。MapReduce很難滿足需求。\&數據進行流式處理,還可參考分布式數據處理系統(tǒng)Percolator\&]
5 總結與展望
MapReduce 分布式計算模型在眾多應用領域具有較好的性能表現,如何在這種編程模式上進一步提高系統(tǒng)的處理能力已成為當前業(yè)界非常關注的問題。比如MapReduce的單jobtracker節(jié)點的問題,需要MapReduce的jobtracker徹底改革,以解決其可擴展性,內存消耗,線程模型,可靠性和性能的幾個缺陷,Yahoo也已經開始重構MapReduce來解決瓶頸;由于Map、Reduce任務之間不能通信,MapReduce不適合處理緊耦合的科學計算,適合并行處理一些松耦合的簡單計算,可以通過改進框架來實現Map、Reduce任務之間的協同處理;由于小文件產生的元數據會占用主節(jié)點的大量內存,而且每一個小文件要占用一個任務,而任務啟動和釋放將耗費大量時間,可以采用Sequencefile方式等把小文件合并成大文件再處理;DBMS都使用散列或者B樹索引加速數據存取[12],如果要尋找記錄的某個子集,使用索引可以有效地將搜索范圍縮小一到兩個數量級,而且,還有查詢優(yōu)化器來確定是使用索引還是執(zhí)行蠻力順序搜索,MapReduce沒有索引,因此,處理時只有蠻力一種選擇,在存取數據時,MapReduce表現出很多的不足,結合Hive和Pig等技術可以很好地解決這個問題。
當前,云計算中使用的分布式計算模型基本上是MapReduce編程模型[13],MapReduce應用研究較多,在分析MapReduce編程模型的基礎上,提出了如下的研究內容:
1) 研究MapReduce架構算法,通過重構MapReduce模型來解決內存瓶頸,優(yōu)化存取機制,適用緊耦合科學計算等;
2) 將MapReduce模型應用于遺傳算法,蟻群算法,神經網絡等智能算法;并將MapReduce模型應用到數據挖掘算法中,比如k-means,SVM,樸素貝葉斯算法等;
3) 將MapReduce應用到數據的統(tǒng)計分析中,提高數據存取效率,采用高級語言來執(zhí)行數據處理。
4) 將MapReduce模型應用到一些緊耦合的數值計算中,先前通過高性能計算來完成的應用,比如氣象,核模擬,生物信息學等。
參考文獻:
[1] Michael Armbrust,Armando Fox.Above the Clouds: A Berkeley View of Cloud Computing[M].UC Berkeley Reliable Adaptive Distributed Systems Laboratory,2009.
[2] Jeffrey Dean,Sanjay Ghemawat.MapReduce:a flexible data processing tool[J].Communications of the ACM, 2010,53(1):72-77.
[3] 王鵬.云計算的關鍵技術與應用實例[M].北京:人民郵電出版社,2010.
[4] Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simpli?ed Data Processing on Large Clusters[J]. Communications of the ACM, 2008,51(1): 107-113.
[5] 劉鵬.云計算[M].2版.北京:電子工業(yè)出版社,2011.
[6] Ralf L?mmel.Googles MapReduce programming model — Revisited[J].Science of Computer Programming, 2008,70(1):1-30.
[7] Tom White. Hadoop權威指南[M].北京:清華大學出版社,2010.
[8] 常濤.改進型 MapReduce 框架的研究與設計[D].北京:北京郵電大學,2011.
[9] 方巍,文學志.云計算:概念、技術及應用研究綜述[J].南京信息工程大學學報:自然科學版,2012,4(4): 351-361.
[10] 陳康,鄭緯民.云計算: 系統(tǒng)實例與研究現狀[J].軟件學報, 2009,20(5):1337-1348.
[11] 周一可.云計算下MapReduce 編程模型可用性的研究與優(yōu)化[D].上海:上海交通大學,2011.
[12] 王晟,趙壁芳.云計算中MapReduce 技術研究[J].通信技術,2012,44(12):59-161.
[13] Tyson Condie, Neil Conway, et al. Hellerstein. Mapreduce online[C].USENIX Symposium on Networked Systems Designand Implementation,2010:21-35.endprint
5 總結與展望
MapReduce 分布式計算模型在眾多應用領域具有較好的性能表現,如何在這種編程模式上進一步提高系統(tǒng)的處理能力已成為當前業(yè)界非常關注的問題。比如MapReduce的單jobtracker節(jié)點的問題,需要MapReduce的jobtracker徹底改革,以解決其可擴展性,內存消耗,線程模型,可靠性和性能的幾個缺陷,Yahoo也已經開始重構MapReduce來解決瓶頸;由于Map、Reduce任務之間不能通信,MapReduce不適合處理緊耦合的科學計算,適合并行處理一些松耦合的簡單計算,可以通過改進框架來實現Map、Reduce任務之間的協同處理;由于小文件產生的元數據會占用主節(jié)點的大量內存,而且每一個小文件要占用一個任務,而任務啟動和釋放將耗費大量時間,可以采用Sequencefile方式等把小文件合并成大文件再處理;DBMS都使用散列或者B樹索引加速數據存取[12],如果要尋找記錄的某個子集,使用索引可以有效地將搜索范圍縮小一到兩個數量級,而且,還有查詢優(yōu)化器來確定是使用索引還是執(zhí)行蠻力順序搜索,MapReduce沒有索引,因此,處理時只有蠻力一種選擇,在存取數據時,MapReduce表現出很多的不足,結合Hive和Pig等技術可以很好地解決這個問題。
當前,云計算中使用的分布式計算模型基本上是MapReduce編程模型[13],MapReduce應用研究較多,在分析MapReduce編程模型的基礎上,提出了如下的研究內容:
1) 研究MapReduce架構算法,通過重構MapReduce模型來解決內存瓶頸,優(yōu)化存取機制,適用緊耦合科學計算等;
2) 將MapReduce模型應用于遺傳算法,蟻群算法,神經網絡等智能算法;并將MapReduce模型應用到數據挖掘算法中,比如k-means,SVM,樸素貝葉斯算法等;
3) 將MapReduce應用到數據的統(tǒng)計分析中,提高數據存取效率,采用高級語言來執(zhí)行數據處理。
4) 將MapReduce模型應用到一些緊耦合的數值計算中,先前通過高性能計算來完成的應用,比如氣象,核模擬,生物信息學等。
參考文獻:
[1] Michael Armbrust,Armando Fox.Above the Clouds: A Berkeley View of Cloud Computing[M].UC Berkeley Reliable Adaptive Distributed Systems Laboratory,2009.
[2] Jeffrey Dean,Sanjay Ghemawat.MapReduce:a flexible data processing tool[J].Communications of the ACM, 2010,53(1):72-77.
[3] 王鵬.云計算的關鍵技術與應用實例[M].北京:人民郵電出版社,2010.
[4] Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simpli?ed Data Processing on Large Clusters[J]. Communications of the ACM, 2008,51(1): 107-113.
[5] 劉鵬.云計算[M].2版.北京:電子工業(yè)出版社,2011.
[6] Ralf L?mmel.Googles MapReduce programming model — Revisited[J].Science of Computer Programming, 2008,70(1):1-30.
[7] Tom White. Hadoop權威指南[M].北京:清華大學出版社,2010.
[8] 常濤.改進型 MapReduce 框架的研究與設計[D].北京:北京郵電大學,2011.
[9] 方巍,文學志.云計算:概念、技術及應用研究綜述[J].南京信息工程大學學報:自然科學版,2012,4(4): 351-361.
[10] 陳康,鄭緯民.云計算: 系統(tǒng)實例與研究現狀[J].軟件學報, 2009,20(5):1337-1348.
[11] 周一可.云計算下MapReduce 編程模型可用性的研究與優(yōu)化[D].上海:上海交通大學,2011.
[12] 王晟,趙壁芳.云計算中MapReduce 技術研究[J].通信技術,2012,44(12):59-161.
[13] Tyson Condie, Neil Conway, et al. Hellerstein. Mapreduce online[C].USENIX Symposium on Networked Systems Designand Implementation,2010:21-35.endprint
5 總結與展望
MapReduce 分布式計算模型在眾多應用領域具有較好的性能表現,如何在這種編程模式上進一步提高系統(tǒng)的處理能力已成為當前業(yè)界非常關注的問題。比如MapReduce的單jobtracker節(jié)點的問題,需要MapReduce的jobtracker徹底改革,以解決其可擴展性,內存消耗,線程模型,可靠性和性能的幾個缺陷,Yahoo也已經開始重構MapReduce來解決瓶頸;由于Map、Reduce任務之間不能通信,MapReduce不適合處理緊耦合的科學計算,適合并行處理一些松耦合的簡單計算,可以通過改進框架來實現Map、Reduce任務之間的協同處理;由于小文件產生的元數據會占用主節(jié)點的大量內存,而且每一個小文件要占用一個任務,而任務啟動和釋放將耗費大量時間,可以采用Sequencefile方式等把小文件合并成大文件再處理;DBMS都使用散列或者B樹索引加速數據存取[12],如果要尋找記錄的某個子集,使用索引可以有效地將搜索范圍縮小一到兩個數量級,而且,還有查詢優(yōu)化器來確定是使用索引還是執(zhí)行蠻力順序搜索,MapReduce沒有索引,因此,處理時只有蠻力一種選擇,在存取數據時,MapReduce表現出很多的不足,結合Hive和Pig等技術可以很好地解決這個問題。
當前,云計算中使用的分布式計算模型基本上是MapReduce編程模型[13],MapReduce應用研究較多,在分析MapReduce編程模型的基礎上,提出了如下的研究內容:
1) 研究MapReduce架構算法,通過重構MapReduce模型來解決內存瓶頸,優(yōu)化存取機制,適用緊耦合科學計算等;
2) 將MapReduce模型應用于遺傳算法,蟻群算法,神經網絡等智能算法;并將MapReduce模型應用到數據挖掘算法中,比如k-means,SVM,樸素貝葉斯算法等;
3) 將MapReduce應用到數據的統(tǒng)計分析中,提高數據存取效率,采用高級語言來執(zhí)行數據處理。
4) 將MapReduce模型應用到一些緊耦合的數值計算中,先前通過高性能計算來完成的應用,比如氣象,核模擬,生物信息學等。
參考文獻:
[1] Michael Armbrust,Armando Fox.Above the Clouds: A Berkeley View of Cloud Computing[M].UC Berkeley Reliable Adaptive Distributed Systems Laboratory,2009.
[2] Jeffrey Dean,Sanjay Ghemawat.MapReduce:a flexible data processing tool[J].Communications of the ACM, 2010,53(1):72-77.
[3] 王鵬.云計算的關鍵技術與應用實例[M].北京:人民郵電出版社,2010.
[4] Jeffrey Dean,Sanjay Ghemawat.MapReduce:Simpli?ed Data Processing on Large Clusters[J]. Communications of the ACM, 2008,51(1): 107-113.
[5] 劉鵬.云計算[M].2版.北京:電子工業(yè)出版社,2011.
[6] Ralf L?mmel.Googles MapReduce programming model — Revisited[J].Science of Computer Programming, 2008,70(1):1-30.
[7] Tom White. Hadoop權威指南[M].北京:清華大學出版社,2010.
[8] 常濤.改進型 MapReduce 框架的研究與設計[D].北京:北京郵電大學,2011.
[9] 方巍,文學志.云計算:概念、技術及應用研究綜述[J].南京信息工程大學學報:自然科學版,2012,4(4): 351-361.
[10] 陳康,鄭緯民.云計算: 系統(tǒng)實例與研究現狀[J].軟件學報, 2009,20(5):1337-1348.
[11] 周一可.云計算下MapReduce 編程模型可用性的研究與優(yōu)化[D].上海:上海交通大學,2011.
[12] 王晟,趙壁芳.云計算中MapReduce 技術研究[J].通信技術,2012,44(12):59-161.
[13] Tyson Condie, Neil Conway, et al. Hellerstein. Mapreduce online[C].USENIX Symposium on Networked Systems Designand Implementation,2010:21-35.endprint