MapReduce原理及其主要实现平台分析
原文:http://www.infotech.ac.cn/article/2012/1003-3513-28-2-60.html
MapReduce原理及其主要實現(xiàn)平臺分析 亢麗蕓, 王效岳, 白如江 摘要 關(guān)鍵詞:?MapReduce;?實現(xiàn)平臺;?Hadoop;?Phoenix;?Disco;?Mars Analysis of MapReduce Principle and Its Main Implementation Platforms Kang Liyun, Wang Xiaoyue, Bai Rujiang Abstract Keyword:?MapReduce;?Implementation platform;?Hadoop;?Phoenix;?Disco;?Mars Show Figures 1 引 言隨著Internet網(wǎng)絡(luò)資源的迅速膨脹,因特網(wǎng)容納了海量的各種類型的數(shù)據(jù)和信息。海量數(shù)據(jù)的處理對服務(wù)器CPU、IO的吞吐都是嚴峻的考驗,不論是處理速度、存儲空間、容錯性,還是在訪問速度等方面,傳統(tǒng)的技術(shù)架構(gòu)和僅靠單臺計算機基于串行的方式越來越不適應(yīng)當(dāng)前海量數(shù)據(jù)處理的要求。國內(nèi)外學(xué)者提出很多海量數(shù)據(jù)處理方法,以改善海量數(shù)據(jù)處理存在的諸多問題。目前已有的海量數(shù)據(jù)處理方法在概念上較容易理解,然而由于數(shù)據(jù)量巨大,要在可接受的時間內(nèi)完成相應(yīng)的處理,只有將這些計算進行并行化處理,通過提取出處理過程中存在的可并行工作的分量,用分布式模型來實現(xiàn)這些并行分量的并行執(zhí)行過程。隨著技術(shù)的發(fā)展,單機的性能有了突飛猛進的發(fā)展變化,尤其是內(nèi)存和處理器等硬件技術(shù),但是硬件技術(shù)的發(fā)展在理論上總是有限度的,如果說硬件的發(fā)展在縱向上提高了系統(tǒng)的性能,那么并行技術(shù)的發(fā)展就是從橫向上拓展了處理的方式。
MapReduce[?1]是由谷歌推出的一個編程模型,也是一個能處理和生成超大數(shù)據(jù)集的算法模型,該架構(gòu)能夠在大量普通配置的計算機上實現(xiàn)并行化處理。
2 MapReduce編程模型研究 2.1 MapReduce編程模型原理MapReduce編程模型結(jié)合用戶實現(xiàn)的Map和Reduce函數(shù),可完成大規(guī)模的并行化計算。MapReduce編程模型的原理[?1]是:用戶自定義的Map函數(shù)處理一個輸入的基于key/value pair的集合,輸出中間基于key/value pair的集合,MapReduce庫把中間所有具有相同key值的value值集合在一起后傳遞給Reduce函數(shù),用戶自定義的Reduce函數(shù)合并所有具有相同key值的value值,形成一個較小value值的集合。一般地,一個典型的MapReduce程序的執(zhí)行流程如圖1所示[?2]:
?
| ? |
|
| 圖1?MapReduce執(zhí)行流程 |
?
MapReduce執(zhí)行過程主要包括:
(1)將輸入的海量數(shù)據(jù)切片分給不同的機器處理;
(2)執(zhí)行Map任務(wù)的Worker將輸入數(shù)據(jù)解析成key/value pair,用戶定義的Map函數(shù)把輸入的key/value pair轉(zhuǎn)成中間形式的key/value pair;
(3)按照key值對中間形式的key/value進行排序、聚合;
(4)把不同的key值和相應(yīng)的value集分配給不同的機器,完成Reduce運算;
(5)輸出Reduce結(jié)果。
任務(wù)成功完成后,MapReduce的輸出存放在R個輸出文件中,一般情況下,這R個輸出文件不需要合并成一個文件,而是作為另外一個MapReduce的輸入,或者在另一個可處理多個分割文件的分布式應(yīng)用中使用。
2.2 MapReduce的類型與格式MapReduce的數(shù)據(jù)模型較簡單,它的Map和Reduce函數(shù)使用key/value pair進行輸入和輸出,Map和Reduce函數(shù)遵循的形式如表1所示[?1]:
| 表1?Map/Reduce函數(shù)數(shù)據(jù)模型 |
MapReduce庫支持多種不同格式的輸入數(shù)據(jù)類型,如文本模式的輸入數(shù)據(jù),每一行被視為一個key/value pair,key是文件的偏移量,value是該行的文本內(nèi)容[?1]。MapReduce的預(yù)定義輸入類型能夠滿足大多數(shù)的輸入要求,使用者還可通過提供一個簡單的Reader接口,實現(xiàn)一個新的輸入類型。MapReduce還提供了預(yù)定義的輸出類型,通過這些預(yù)定義類型能夠產(chǎn)生不同格式的輸出數(shù)據(jù),用戶可采用類似添加新輸入數(shù)據(jù)類型的方式增加新輸出類型。
3 MapReduce主要實現(xiàn)平臺受Google MapReduce啟發(fā),許多研究者在不同的實驗平臺上實現(xiàn)了MapReduce,并取得了一些研究成果,其中較具代表性的研究成果有Apache的Hadoop,斯坦福大學(xué)的Phoenix,Nokia研究中心的Disco和香港科技大學(xué)的Mars。
3.1 Hadoop(1)平臺介紹
Apache軟件基金會對Hadoop(http://hadoop.apache.org/)的設(shè)計思想,來源于Google的GFS(Google File System)[?3]和MapReduce[?1]。Hadoop是一個開源軟件框架,通過在集群計算機中使用簡單的編程模型,可編寫和運行分布式應(yīng)用程序處理大規(guī)模數(shù)據(jù)。Hadoop包括三個子項目:Hadoop Common、Hadoop Distributed File System(HDFS) 和Hadoop MapReduce,其中 Hadoop Common是一套支持Hadoop子項目的工具,由文件系統(tǒng)、遠程過程調(diào)用(Remote Procedure Calls,RPC)和序列化庫構(gòu)成;HDFS是一個分布式文件系統(tǒng),提供高吞吐量的應(yīng)用程序數(shù)據(jù)訪問;Hadoop MapReduce是一個在計算機集群上分布式處理海量數(shù)據(jù)集的軟件框架。
(2)工作流程
Hadoop運行MapReduce作業(yè)的整個過程如圖2所示[?2]:
?
| ? |
|
| 圖2?Hadoop運行MapReduce作業(yè)工作原理[?2] |
?
在最上層,有4個獨立的實體,客戶端、jobtracker、tasktracker和分布式文件系統(tǒng)。客戶端提交MapReduce作業(yè);jobtracker協(xié)調(diào)作業(yè)的運行,jobtracker是一個Java應(yīng)用程序,它的主類是JobTracker;tasktracker運行作業(yè)劃分后的任務(wù),tasktracker也是一個Java應(yīng)用程序,它的主類是TaskTracker;分布式文件系統(tǒng)(一般為HDFS)用來在其他實體之間共享作業(yè)文件。Hadoop運行MapReduce作業(yè)的步驟主要包括:提交作業(yè);初始化作業(yè);分配任務(wù);執(zhí)行任務(wù);更新進度和狀態(tài);完成作業(yè)[?2]。
Hadoop MapReduce框架包括一個Jobtracker和一定數(shù)量的Tasktracker[?4],Jobtracker通常運行在和名稱節(jié)點相同的主機上。用戶將MapReduce 作業(yè)發(fā)送給Jobtracker所在集群的其他機器上分割工作,集群中其他的空閑機器,每個機器運行一個Tasktracker,Tasktracker與Jobtracker通信,在可能的情況下, Jobtracker給它們分配Map或Reduce任務(wù)。
3.2 Phoenix(1)平臺介紹
Phoenix(http://mapreduce.stanford.edu/)作為斯坦福大學(xué)EE382a課程[?5]的一類項目,由斯坦福大學(xué)計算機系統(tǒng)實驗室開發(fā)。Phoenix[?6]是為達到共享內(nèi)存系統(tǒng)的目的,對Google MapReduce的一種實現(xiàn)方式。Phoenix對MapReduce的實現(xiàn)原則和最初由Google 實現(xiàn)的MapReduce基本相同。不同的是,它在集群中以實現(xiàn)共享內(nèi)存系統(tǒng)為目的,共享內(nèi)存能最小化由任務(wù)派生和數(shù)據(jù)間的通信所造成的間接成本。Phoenix可編程多核芯片或共享內(nèi)存多核處理器(SMPs和 ccNUMAs),用于數(shù)據(jù)密集型任務(wù)處理。
(2)工作流程
Phoenix系統(tǒng)包括一個簡單的應(yīng)用程序編程接口(Application Programming Interface,API)和一個高效運行時系統(tǒng),該API對應(yīng)用程序的程序員是可見的,高效的運行時系統(tǒng)能夠自動管理線程的創(chuàng)建、動態(tài)任務(wù)調(diào)度、數(shù)據(jù)分區(qū)、跨處理器節(jié)點的容錯。Phoenix使用線程創(chuàng)建并行化的Map和Reduce任務(wù),給可用的處理器動態(tài)調(diào)度任務(wù),為了實現(xiàn)負載均衡和最大化吞吐量,通過調(diào)整任務(wù)粒度和并行任務(wù)的分配來進行局部性管理。
?
| ? |
|
| 圖3Phoenix運行時系統(tǒng)的基本數(shù)據(jù)流[?6] |
?
圖3顯示了Phoenix運行時系統(tǒng)工作的基本流程[?6],運行時由調(diào)度器控制,調(diào)度器由用戶代碼進行初始化。調(diào)度器創(chuàng)建和管理所有運行Map和Reduce任務(wù)線程,還管理用于任務(wù)通信的緩沖區(qū)。程序員通過scheduler_args_t結(jié)構(gòu)體來初始化調(diào)度器需要的所有數(shù)據(jù)和函數(shù)指針,初始化完成后,調(diào)度器判定用于計算的內(nèi)核數(shù)量,對于每一個內(nèi)核,它派生一個線程,動態(tài)分配一定數(shù)量的Map和Reduce任務(wù)[?6]。
3.3 Disco(1)平臺介紹
Disco(http://discoproject.org/)是由Nokia研究中心開啟的,基于MapReduce的分布式數(shù)據(jù)處理框架,核心部分由并行性很高的Erlang語言開發(fā),外部編程接口為Python語言。Disco是一個開放源碼的大規(guī)模數(shù)據(jù)分析平臺,支持大數(shù)據(jù)集的并行計算,能運行在不可靠的集群計算機上。Disco可部署在集群和多核計算機上,還可部署在Amazon EC2上。
(2)工作流程
Disco基于主/從(Master/Slave)架構(gòu),總體設(shè)計架構(gòu)如圖4所示[?7]:
?
| ? |
|
| 圖4?Hadoop運行MapReduce作業(yè)工作原理[?7] |
?
Disco工作流程主要包括5個部分:
①Disco用戶使用Python腳本開始Disco作業(yè);
②作業(yè)請求通過HTTP發(fā)送到主機;
③主機是一個Erlang進程,通過HTTP接收作業(yè)請求;
④主機通過SSH啟動每個節(jié)點處的從機;
⑤從機在Worker進程中運行Disco任務(wù)。
客戶端進程是一些Python程序,使用函數(shù)disco.job()向Master提交作業(yè);主機Master接收作業(yè),并將它們添加到作業(yè)隊列中,以便進行調(diào)度;當(dāng)集群中的節(jié)點可用時,Master啟動集群中的Slave機器,Slave機器在各自的節(jié)點處啟動和監(jiān)控所有的進程;Workers用于執(zhí)行提交作業(yè)中的具體任務(wù),Workers的輸出位置被發(fā)送到Master。Disco在每個從機服務(wù)器節(jié)點上運行一個HTTP服務(wù)器,當(dāng)Worker和輸入運行在不同節(jié)點時,便于數(shù)據(jù)的遠程訪問。用戶可以限制每個節(jié)點上并行運行的Worker數(shù)量,根據(jù)集群中的可用CPU和磁盤資源,指定盡可能多的任務(wù)。
3.4 Mars(1)平臺介紹
一些研究者正在將MapReduce架構(gòu)擴展到圖形處理器(Graphic Processing Units,GPUs)上實現(xiàn),香港科技大學(xué)的He 等[?8],與微軟和新浪合作,在單GPU上開發(fā)了Mars(http://www.cse.ust.hk/gpuqp/Mars.html)。Mars是基于圖形處理器(GPUs)對Google MapReduce的一個實現(xiàn),目前已經(jīng)包含字符串匹配、矩陣乘法、倒排索引、字詞統(tǒng)計、網(wǎng)頁訪問排名、網(wǎng)頁訪問計數(shù)、相似性評估和K均值等8項應(yīng)用,能夠在32位與64位的Linux平臺下運行[?9]。
(2)工作流程
Mars和基于GPU的MapReduce框架相似,也包括Map和Reduce兩個階段,GPU上Mars的基本工作流程如圖5所示[?8]:
?
| ? |
|
| 圖5?GPU上Mars的基本工作流程[?8] |
?
在開始每個階段之前,Mars初始化線程配置,包括GPU上線程組的數(shù)量和每個線程組中線程的數(shù)量。Mars在GPU內(nèi)使用大量的線程,在運行時系統(tǒng)的時候,任務(wù)均勻分配給線程,每個線程負責(zé)一個Map或Reduce任務(wù),以小數(shù)量的key/value pairs作為輸入,并通過一種無鎖的方案來管理MapReduce框架中的并發(fā)寫入。
Mars的工作流程主要有7個操作步驟:
①在主存儲器中輸入key/value對,并將它們存儲到數(shù)組;
②初始化運行時的配置參數(shù);
③復(fù)制主存儲器中的輸入數(shù)組到GPU設(shè)備內(nèi)存;
④啟動GPU上的Map階段,并將中間的key/value對存儲到數(shù)組;
⑤如果noSort選擇F,即需要排序階段,則對中間結(jié)果進行排序;
⑥如果noReduce是F,即需要Reduce階段,則啟動GPU上的Reduce階段,并輸出最終結(jié)果,否則中間結(jié)果就是最終結(jié)果;
⑦復(fù)制GPU設(shè)備存儲器中的結(jié)果到主存儲器。
在上述步驟中,①②③和⑦的操作由調(diào)度器來完成,調(diào)度器負責(zé)準備數(shù)據(jù)輸入,在GPU上調(diào)用Map和Reduce階段,并將結(jié)果返回給用戶。
4 主要實現(xiàn)平臺的比較分析 4.1 編程語言(1)Hadoop
Hadoop是采用Java開發(fā)的,所以能很好地支持Java語言編寫的MapReduce作業(yè),但在實際應(yīng)用中,有時候由于要用到非Java的第三方庫或者其他原因,需采用C/C++或其他語言編寫MapReduce作業(yè),這時候可能要用到Hadoop提供的一些工具。若用C/C++編寫MapReduce作業(yè),可使用Hadoop Streaming[?10]或Hadoop Pipes[?2,?11]工具;若用Python編寫MapReduce作業(yè),可以使用Hadoop Streaming或Pydoop[?12,?13]工具;若使用其他語言,如Shell腳本、PHP、Ruby等,可使用Hadoop Streaming。
Java是 Hadoop支持的最好最全面的語言,而且提供了很多工具方便程序員開發(fā)。Hadoop流(Hadoop Streaming)使用Unix標準流作為Hadoop和程序之間的接口,其最大的優(yōu)點是支持多種編程語言,只要編寫的MapReduce程序能夠讀取標準輸入,并寫到標準輸出,但效率較低,Reduce 任務(wù)需等到Map 階段完成后才能啟動。Hadoop管道(Hadoop Pipes)是Hadoop MapReduce的C++接口的代稱,與流不同,流使用標準輸入和輸出讓Map和Reduce節(jié)點之間相互交流,管道使用sockets作為tasktracker與C++編寫的Map或者Reduce函數(shù)的進程之間的通道。Pydoop是專門為Python程序員編寫MapReduce作業(yè)設(shè)計的,底層使用了Hadoop Streaming接口和libhdfs庫。
(2)Phoenix
目前,Phoenix能夠提供C和C++的應(yīng)用程序編程接口,類似的API也可以被定義成像Java或者C#這樣的語言[?6]。Phoenix API包括兩部分函數(shù)集:第一個函數(shù)集由Phoenix提供,可用于應(yīng)用程序代碼中來初始化系統(tǒng)和發(fā)出輸出對;第二部分包括程序員自定義函數(shù)。
(3)Disco
Disco平臺的核心部分由并行性能很高的Erlang語言開發(fā),其外部編程接口為易于編程的Python語言。Disco代碼風(fēng)格指南[?14]包含了Disco代碼庫的編碼約定:對于Erlang而言,除另有規(guī)定外,一般采用Erlang編程規(guī)則[?15];對于Python,除了另有規(guī)定外,采用PEP 8準則[?16]。
(4)Mars
目前Mars提供了C和C++的應(yīng)用程序編程接口API,和已有的MapReduce框架相似,Mars也有兩種APIs集:一種是系統(tǒng)提供的APIs,用戶可以通過調(diào)用庫來使用;另一種是用戶提供的APIs,該部分由用戶實現(xiàn)[?8]。Mars當(dāng)前版本可運行在32位和64位的Linux系統(tǒng)上,支持最新的CUDA SDK 2.3。
上述4種平臺的API支持的編程語言比較如表2所示:
| 表2?MapReduce不同實現(xiàn)平臺編程語言 |
(1)Hadoop
Hadoop平臺搭建完成后,在一個全配置的集群中,運行Hadoop意味著在集群的不同機器上運行一組守護進程(daemons),這些進程包括:名稱節(jié)點(NameNode);數(shù)據(jù)節(jié)點(DataNode);次名稱節(jié)點(Secondary NameNode);作業(yè)跟蹤節(jié)點(JobTracker);任務(wù)跟蹤節(jié)點(TaskTracker)。
從HDFS分布式存儲的角度來說,集群中的節(jié)點由一個 NameNode 和若干個 DataNode組成,另有一個 Secondary NameNode作為NameNode的備份;從MapReduce分布式計算的角度來說,集群中的節(jié)點由一個 JobTracker 和若干個 TaskTracker 組成。典型Hadoop集群的拓撲結(jié)構(gòu)如圖6所示[?17]:
?
| ? |
|
| 圖6?典型Hadoop集群拓撲結(jié)構(gòu)[?17] |
?
Hadoop的分布式存儲和分布式計算都采用了主/從結(jié)構(gòu),NameNode和JobTracker的守護進程運行在主節(jié)點上,DataNode和TaskTracker運行在從節(jié)點上,TaskTracker 必須運行在 DataNode 上,便于數(shù)據(jù)的本地計算,JobTracker 和 NameNode 則無須一定在同一臺機器上。
(2)Phoenix
Phoenix系統(tǒng)包括一個簡單的API和一個高效的運行時系統(tǒng),該API對應(yīng)用程序的程序員是可見的,高效的運行時系統(tǒng)能夠自動管理線程創(chuàng)建、動態(tài)任務(wù)調(diào)度、數(shù)據(jù)分區(qū)、跨處理器節(jié)點的容錯。運行時系統(tǒng)的實現(xiàn)是建立在PThread[?18]之上的,也可方便地移植到其他共享內(nèi)存線程庫上。
(3)Disco
Disco平臺由分布式存儲系統(tǒng)DDFS(Disco Distributed File System)和MapReduce框架組成,DDFS與計算框架是高度耦合的,DDFS架構(gòu)如圖7所示[?19]:
?
| ? |
|
| 圖7?DDFS的架構(gòu)[?19] |
?
DDFS嵌入到Disco內(nèi),有一個Master節(jié)點和多個存儲節(jié)點,每個存儲節(jié)點由一組磁盤或者卷宗組成(vol0…volN),它們分別掛載在DDFS_DATA/vol0 …DDFS_DATA/volN上。每個卷宗下面有兩個文件tag 和 blob,分別用于存儲標記 tag(相當(dāng)于key)和標記對應(yīng)的值(即value)。DDFS會監(jiān)控各個節(jié)點上的磁盤使用情況,每隔一段時間進行負載均衡。
(4)Mars
Mars在多核架構(gòu)模型基礎(chǔ)上設(shè)計,提供了一個小的APIs集,這些和基于CPU的MapReduce相似。Mars運行時為Map或Reduce任務(wù)初始化大量的GPU線程,并為每個線程自動分配少量的key/value對來運行任務(wù)。由于數(shù)據(jù)分析任務(wù)涉及到大量的文本處理,Mars的APIs還設(shè)計了一個高效的字符串庫。
4.3 功能特點(1)Hadoop
Hadoop是一個開源框架,通過在大規(guī)模集群計算機中使用簡單的編程模型,可編寫和運行分布式應(yīng)用程序處理大規(guī)模數(shù)據(jù),是目前應(yīng)用廣泛的開源并行編程框架。
Hadoop具有諸多優(yōu)點:
①良好的擴展性:通過簡單增加集群節(jié)點,可處理更大規(guī)模的數(shù)據(jù)集;
②可靠性:Hadoop致力于運行在一般商用硬件上,其架構(gòu)假設(shè)硬件會頻繁失效,它可以從容地處理大多數(shù)故障;
③高效性:Hadoop集群的存儲和計算能力非常強,適合有超大數(shù)據(jù)集的應(yīng)用程序;
④經(jīng)濟性:Hadoop運行在一般商用機器構(gòu)成的大型集群上或如亞馬遜彈性計算云(EC2)等云計算服務(wù)器之上;
⑤易用性:Hadoop方便、簡單,用戶可快速搭建自己的Hadoop集群,并編寫出高效的并行代碼。
但是Hadoop也存在一些不足,由于系統(tǒng)開銷等原因,處理小規(guī)模數(shù)據(jù)的速度不一定比串行程序快,而且單機處理數(shù)據(jù)的性能較低;若計算時產(chǎn)生的中間結(jié)果文件非常大,Reduce過程需要通過遠程過程調(diào)用來獲取中間結(jié)果文件,這樣會加大網(wǎng)絡(luò)傳輸開銷;作為一個比較新的項目, Hadoop在很多方面還需提升,包括穩(wěn)定性、易用性、可維護性、可測試性等,特別是在MapReduce層,還未解決線性擴展問題。
(2)Phoenix
Phoenix在共享內(nèi)存系統(tǒng)上實現(xiàn)了MapReduce, 利用共享內(nèi)存緩沖區(qū)實現(xiàn)通信,從而避免了因數(shù)據(jù)復(fù)制產(chǎn)生的開銷,但Phoenix也存在不能自動執(zhí)行迭代計算、沒有高效的錯誤發(fā)現(xiàn)機制等不足之處[?20]。
(3)Disco
Disco是一個開源的大規(guī)模數(shù)據(jù)分析平臺,由一個Master 服務(wù)器和一系列Worker節(jié)點組成,其中Master和Worker之間采用基于輪詢[?21]的通信機制,使用HTTP的方式傳輸數(shù)據(jù)。Master 服務(wù)器時刻跟蹤用戶應(yīng)用,負責(zé)任務(wù)調(diào)度與分配,保存與應(yīng)用相關(guān)的輸入數(shù)據(jù)、中間值和最終結(jié)果。Worker節(jié)點則負責(zé)執(zhí)行Map與Reduce任務(wù),但是由于輪詢的時間間隔不好確定,若時間間隔設(shè)置不當(dāng),則會顯著降低程序的執(zhí)行性能[?20]。
(4)Mars
Mars是基于GPUs的MapReduce實現(xiàn),該框架旨在為開發(fā)者提供一個基于GPU的通用框架以完成準確、高效、簡單的實施數(shù)據(jù)和計算密集型任務(wù)。由于GPU線程不支持運行時動態(tài)調(diào)度,所以給每個GPU線程分配的任務(wù)是固定的,若輸入數(shù)據(jù)劃分不均勻,將導(dǎo)致Map或Reduce階段的負載不均衡,使得整個系統(tǒng)性能急劇降低。同時由于GPU不支持運行時在設(shè)備內(nèi)存中分配空間,需要預(yù)先在設(shè)備內(nèi)存中分配好輸入數(shù)據(jù)和輸出數(shù)據(jù)的存放空間,但是Map和Reduce階段輸出數(shù)據(jù)大小是未知的,并且當(dāng)多個GPU線程同時向共享輸出區(qū)域中寫數(shù)據(jù)時,易造成寫沖突[?20]。
MapReduce不同的實現(xiàn)平臺和研究成果有著不同的功能和優(yōu)缺點,主要實現(xiàn)平臺功能特點比較如表3所示:
| 表3?不同實現(xiàn)平臺功能特點比較 |
(1)Hadoop
Hadoop可充分利用集群的優(yōu)勢進行高速運算和存儲,由于Hadoop在處理大規(guī)模數(shù)據(jù)上的優(yōu)勢,基于Hadoop的應(yīng)用非常多,尤其是在互聯(lián)網(wǎng)領(lǐng)域。Yahoo!通過集群運行Hadoop,以支持廣告系統(tǒng)和 Web搜索研究,并將Hadoop廣泛應(yīng)用于日志分析、廣告計算、科研實驗中[?22];Amazon的搜索門戶A9.com基于Hadoop完成了商品搜索的索引生成[?23];互聯(lián)網(wǎng)電臺和音樂社區(qū)網(wǎng)站Last.fm使用Hadoop集群進行日志分析、A/B測試評價、Ad Hoc處理和圖表生成等日常作業(yè)[?24];著名SNS網(wǎng)站Facebook使用Hadoop,存儲日志數(shù)據(jù),支持其上的數(shù)據(jù)分析和機器學(xué)習(xí),還用Hadoop構(gòu)建了整個網(wǎng)站的數(shù)據(jù)倉庫,進行日志分析和數(shù)據(jù)挖掘[?25]。淘寶是國內(nèi)最先使用Hadoop的公司之一,其Hadoop系統(tǒng)用于存儲并處理電子商務(wù)交易的相關(guān)數(shù)據(jù)[?26];百度使用Hadoop進行搜索日志分析和網(wǎng)頁數(shù)據(jù)挖掘工作,百度在Hadoop上進行廣泛應(yīng)用并對它進行改進和調(diào)整,同時贊助了HyperTable[?27]的開發(fā)。
Hadoop已取得非常突出的成績,隨著互聯(lián)網(wǎng)的發(fā)展,新的業(yè)務(wù)模式還將不斷涌現(xiàn),其應(yīng)用也會從互聯(lián)網(wǎng)領(lǐng)域向電信、銀行、電子商務(wù)、生物制藥等領(lǐng)域拓展。
(2)Phoenix
Phoenix是在共享內(nèi)存系統(tǒng)上實現(xiàn)的MapReduce,其應(yīng)用主要包括:
①詞頻統(tǒng)計:統(tǒng)計文件集中每個詞的共現(xiàn)頻率;
②反向鏈接:創(chuàng)建HTML文件反向鏈接指數(shù);
③矩陣乘法(Matrix Multiply):密集型整數(shù)矩陣乘法;
④字符串匹配:通過鍵值搜索文檔;
⑤K-means:通過K均值迭代聚類算法,將三維數(shù)據(jù)點分成組;
⑥PCA(Principal Components Analysis):主成分分析矩陣;
⑦直方圖:在一組圖像中判定每個RGB分量的頻率;
⑧線性回歸(Linear Regression):計算一組點的最佳擬合線[?6]。
(3)Disco
作為一個分布式處理的輕量級MapReduce實現(xiàn)框架,Disco的用途主要是:解析、格式化、日志分析、聚類、概率建模、數(shù)據(jù)挖掘、全文索引和機器學(xué)習(xí)。目前Disco正被用于多種行業(yè),解決具有挑戰(zhàn)性的問題,涉及到大規(guī)模數(shù)據(jù)。Disco商業(yè)級的應(yīng)用如:在Allston Trading,Disco用于各種各樣的歷史研究和現(xiàn)代金融領(lǐng)域的實時舉措;在Chango,Disco是分析和競標廣告市場的核心組件;在Nokia,最大的數(shù)據(jù)分析集群運行的就是Disco,對Nokia龐大的移動數(shù)據(jù)資產(chǎn)進行日常分析;在Zemanta,Disco用來處理關(guān)于維基百科和維基共享資源圖像的上下文數(shù)據(jù)[?28]。
(4)Mars
Mars是一個GPUs上的MapReduce框架,包含了不同種類的Web數(shù)據(jù)分析如Web文檔搜索(字符串匹配和倒排索引),Web文檔處理(K均值、相似性評估和矩陣乘法)和Web日志分析(詞頻統(tǒng)計、網(wǎng)頁訪問計數(shù)和網(wǎng)頁訪問排名)等應(yīng)用。由于Mars的編程接口是為圖形處理而專門設(shè)計的,底層硬件比較復(fù)雜,造成用戶編程難度較大,不利于其推廣使用[?20]。
| 表4?主要實現(xiàn)平臺比較 |
表4顯示了MapReduce不同實現(xiàn)平臺,在使用難易程度、普及程度及應(yīng)用領(lǐng)域方面的比較。這4種實現(xiàn)平臺,除Hadoop外,其他實現(xiàn)都沒有得到廣泛應(yīng)用。
5 結(jié) 語現(xiàn)實世界很多實例都可用MapReduce編程模型來表示,MapReduce作為一個通用可擴展的并行處理模型,可有效地處理海量數(shù)據(jù),不斷地從中分析挖掘出有價值的信息。MapReduce封裝了并行處理、負載均衡、容錯、數(shù)據(jù)本地化等技術(shù)難點的細節(jié),對于沒有并行或者分布式系統(tǒng)開發(fā)經(jīng)驗的程序員而言,MapReduce庫也易于使用。MapReduce編程模型已成功應(yīng)用于多個領(lǐng)域,但是,當(dāng)前有關(guān)MapReduce的研究主要集中在其應(yīng)用上,對于算法及算法效率提高和優(yōu)化等方面的研究較少,還有待于重視,以使MapReduce能更好地被應(yīng)用。
參考文獻 View Option?| [1] | Dean?J,?Ghemawat?S.?MapReduce: Simplified Data Processing on Large Clusters[J].?Communications of the ACM,?2008,?51(1):?107-113.?[本文引用:5]?[JCR: 2.511] |
| [2] | White?T.?Hadoop: The Definitive Guide[M].?O’Reilly Media,?2009.?[本文引用:4] |
| [3] | Ghemawat?S,?Gobioff?H,?Leung?S.?The Google File System[C].?In: Proceedings of the 19th ACM SIGOPS Symposium on Operating Systems Principles (SOSP’03), Bolton Land ing, NY. New York, USA: ACM,?2003:?29-43.[本文引用:1] |
| [4] | MapReduce Tutorial [EB/OL].?[2011-08-19].?http://hadoop.apache.org/common/docs/current/mapred_tutorial.html.[本文引用:1] |
| [5] | EE382a: Advanced Processor Architecture[EB/OL]. [2011-08-20].https://courseware.stanford.edu/pg/courses/95981.?[本文引用:1] |
| [6] | Ranger?C,?Raghuraman?R,?Penmetsa?A,?et al.?Evaluating MapReduce for Multi-core and Multiprocessor Systems[C].?In: Proceedings of the 2007 IEEE 13th International Symposium on High Performance Computer Architecture(HPCA’07). Washington, DC, USA: IEEE Computer Society,?2007:?13-24.?[本文引用:5] |
| [7] | Technical Overview Disco Architecture [EB/OL]. [2011-12-22].?http://discoproject.org/doc/overview.html.?[本文引用:1] |
| [8] | He?B S,?Fang?W B,?Luo?Q,?et al.?Mars: A MapReduce Framework on Graphics Processors[C]. In: Proceedings of the 17th International Conference on Parallel Architectures and Compilation Techniques(PACT’08).?New York, NY, USA: ACM,?2008:?260-269.?[本文引用:3] |
| [9] | Mars: A MapReduce Framework on Graphics Processors [EB/OL]. [2011-08-20].http://www.cse.ust.hk/gpuqp/Mars.html.?[本文引用:1] |
| [10] | Hadoop Streaming [EB/OL].?[2011-12-23].?http://hadoop.apache.org/common/docs/r0.15.2/streaming.html.[本文引用:1] |
| [11] | Package org. apache. hadoop. mapred. pipes[EB/OL]. [2011-12-23].http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/pipes/package-summary.html.?[本文引用:1] |
| [12] | Leo?S,?Zanetti?G.?Pydoop: A Python MapReduce and HDFS API for Hadoop[C]. In: Proceedings of the 19th ACM International Sysposium on High Performance Distributed Computing(HPDC’10).?New York, NY, USA: ACM,?2010:?819-825.?[本文引用:1] |
| [13] | Pydoop?[EB/OL]. [?2011-12-26]. Pydoop [EB/OL].?[2011-12-26].?http://sourceforge.net/projects/pydoop/.?[本文引用:1] |
| [14] | Style Guide for Disco Code [EB/OL]. [2011-12-26].?http://discoproject.org/doc/howto/style.html.?[本文引用:1] |
| [15] | Programming Rules and Conventions [EB/OL]. [2011-12-26].http://www.erlang.se/doc/programming_rules.shtml.?[本文引用:1] |
| [16] | Style Guide for Python Code[EB/OL]. [2011-12-26].?http://www.python.org/dev/peps/pep-0008.?[本文引用:1] |
| [17] | Lam?C.?Hadoop in Action[M].?Shelter Island , NY: Manning Publications Co.?,?2010.?[本文引用:1] |
| [18] | POSIX Threads Programming[EB/OL]. [2011-12-29].?https://computing.llnl.gov/tutorials/pthreads/.?[本文引用:1] |
| [19] | Disco Distributed File System[EB/OL]. [2011-12-29].?http://discoproject.org/doc/howto/ddfs.html.?[本文引用:1] |
| [20] | 李建江,?崔健,?王聃,?等.?MapReduce并行編程模型研究綜述[J].?電子學(xué)報,?2011,?39(11):?2635-2642.? (Li?Jianjiang,?Cui?Jian,?Wang?Dan,?et al.?Survey of MapReduce Parallel Programming Model[J].?Chinese Journal of Electronics,?2011,?39(11):?2635-2642. )?[本文引用:4]?[JCR: 0.265] |
| [21] | Langendoen?K,?Romein?J,?Bhoedjang?R,?et al.?Integrating Polling, Interrupts, and Thread Management[C]. In: Proceedings of the 6th Symposium on the Frontiers of Massively Parallel Computation.?Los Alamitos: IEEE Computer Society,?1996:?13-22.?[本文引用:1] |
| [22] | Hadoop at Yahoo![EB/OL]. [2012-01-07].?http://developer.yahoo.com/hadoop/.?[本文引用:1] |
| [23] | PoweredBy-Haoop Wiki[EB/OL]. [2012-01-07].?http://wiki.apache.org/hadoop/PoweredBy.?[本文引用:1] |
| [24] | Hadoop at Last . fm[EB/OL]. [2012-01-08].?http://www.slideshare.net/klbostee/hadoop-at-Lastfm.?[本文引用:1] |
| [25] | Facebook on Hadoop, Hive, HBase, and A/B Testing and A/B Testing[EB/OL]. [2012-01-08].http://www.infoq.com/news/2010/07/facebook-hadoop-summit.?[本文引用:1] |
| [26] | Hadoop Archive-淘寶共享數(shù)據(jù)平臺TBDATA. org[EB/OL]. [2012-02-08].http://www.tbdata.org/archives/category/cloud-computing/hadoop.(?Hadoop Archive: Taobao Shared Data Platform TBDATA. org[EB/OL]. [2012-01-08].?http://www.tbdata.org/archives/category/cloud-computing/hadoop?[本文引用:1] |
| [27] | Hypertable: An Open Source, High Performance, Scalable Database[EB/OL][2011-08-19].http://hypertable.org/.?[本文引用:1] |
| [28] | Disco: Massive Data-minimal Code[EB/OL]. [2011-12-22].?http://discoproject.org/about.?[本文引用:1] |
轉(zhuǎn)載于:https://www.cnblogs.com/zhizhan/p/4883373.html
總結(jié)
以上是生活随笔為你收集整理的MapReduce原理及其主要实现平台分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZeroClipboard的时代或许已经
- 下一篇: java字节码忍者禁术