MapReduce原理及其主要实现平台分析
原文:http://www.infotech.ac.cn/article/2012/1003-3513-28-2-60.html
MapReduce原理及其主要實現平臺分析 亢麗蕓, 王效岳, 白如江 摘要 關鍵詞:?MapReduce;?實現平臺;?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網絡資源的迅速膨脹,因特網容納了海量的各種類型的數據和信息。海量數據的處理對服務器CPU、IO的吞吐都是嚴峻的考驗,不論是處理速度、存儲空間、容錯性,還是在訪問速度等方面,傳統的技術架構和僅靠單臺計算機基于串行的方式越來越不適應當前海量數據處理的要求。國內外學者提出很多海量數據處理方法,以改善海量數據處理存在的諸多問題。目前已有的海量數據處理方法在概念上較容易理解,然而由于數據量巨大,要在可接受的時間內完成相應的處理,只有將這些計算進行并行化處理,通過提取出處理過程中存在的可并行工作的分量,用分布式模型來實現這些并行分量的并行執行過程。隨著技術的發展,單機的性能有了突飛猛進的發展變化,尤其是內存和處理器等硬件技術,但是硬件技術的發展在理論上總是有限度的,如果說硬件的發展在縱向上提高了系統的性能,那么并行技術的發展就是從橫向上拓展了處理的方式。
MapReduce[?1]是由谷歌推出的一個編程模型,也是一個能處理和生成超大數據集的算法模型,該架構能夠在大量普通配置的計算機上實現并行化處理。
2 MapReduce編程模型研究 2.1 MapReduce編程模型原理MapReduce編程模型結合用戶實現的Map和Reduce函數,可完成大規模的并行化計算。MapReduce編程模型的原理[?1]是:用戶自定義的Map函數處理一個輸入的基于key/value pair的集合,輸出中間基于key/value pair的集合,MapReduce庫把中間所有具有相同key值的value值集合在一起后傳遞給Reduce函數,用戶自定義的Reduce函數合并所有具有相同key值的value值,形成一個較小value值的集合。一般地,一個典型的MapReduce程序的執行流程如圖1所示[?2]:
?
| ? |
|
| 圖1?MapReduce執行流程 |
?
MapReduce執行過程主要包括:
(1)將輸入的海量數據切片分給不同的機器處理;
(2)執行Map任務的Worker將輸入數據解析成key/value pair,用戶定義的Map函數把輸入的key/value pair轉成中間形式的key/value pair;
(3)按照key值對中間形式的key/value進行排序、聚合;
(4)把不同的key值和相應的value集分配給不同的機器,完成Reduce運算;
(5)輸出Reduce結果。
任務成功完成后,MapReduce的輸出存放在R個輸出文件中,一般情況下,這R個輸出文件不需要合并成一個文件,而是作為另外一個MapReduce的輸入,或者在另一個可處理多個分割文件的分布式應用中使用。
2.2 MapReduce的類型與格式MapReduce的數據模型較簡單,它的Map和Reduce函數使用key/value pair進行輸入和輸出,Map和Reduce函數遵循的形式如表1所示[?1]:
| 表1?Map/Reduce函數數據模型 |
MapReduce庫支持多種不同格式的輸入數據類型,如文本模式的輸入數據,每一行被視為一個key/value pair,key是文件的偏移量,value是該行的文本內容[?1]。MapReduce的預定義輸入類型能夠滿足大多數的輸入要求,使用者還可通過提供一個簡單的Reader接口,實現一個新的輸入類型。MapReduce還提供了預定義的輸出類型,通過這些預定義類型能夠產生不同格式的輸出數據,用戶可采用類似添加新輸入數據類型的方式增加新輸出類型。
3 MapReduce主要實現平臺受Google MapReduce啟發,許多研究者在不同的實驗平臺上實現了MapReduce,并取得了一些研究成果,其中較具代表性的研究成果有Apache的Hadoop,斯坦福大學的Phoenix,Nokia研究中心的Disco和香港科技大學的Mars。
3.1 Hadoop(1)平臺介紹
Apache軟件基金會對Hadoop(http://hadoop.apache.org/)的設計思想,來源于Google的GFS(Google File System)[?3]和MapReduce[?1]。Hadoop是一個開源軟件框架,通過在集群計算機中使用簡單的編程模型,可編寫和運行分布式應用程序處理大規模數據。Hadoop包括三個子項目:Hadoop Common、Hadoop Distributed File System(HDFS) 和Hadoop MapReduce,其中 Hadoop Common是一套支持Hadoop子項目的工具,由文件系統、遠程過程調用(Remote Procedure Calls,RPC)和序列化庫構成;HDFS是一個分布式文件系統,提供高吞吐量的應用程序數據訪問;Hadoop MapReduce是一個在計算機集群上分布式處理海量數據集的軟件框架。
(2)工作流程
Hadoop運行MapReduce作業的整個過程如圖2所示[?2]:
?
| ? |
|
| 圖2?Hadoop運行MapReduce作業工作原理[?2] |
?
在最上層,有4個獨立的實體,客戶端、jobtracker、tasktracker和分布式文件系統。客戶端提交MapReduce作業;jobtracker協調作業的運行,jobtracker是一個Java應用程序,它的主類是JobTracker;tasktracker運行作業劃分后的任務,tasktracker也是一個Java應用程序,它的主類是TaskTracker;分布式文件系統(一般為HDFS)用來在其他實體之間共享作業文件。Hadoop運行MapReduce作業的步驟主要包括:提交作業;初始化作業;分配任務;執行任務;更新進度和狀態;完成作業[?2]。
Hadoop MapReduce框架包括一個Jobtracker和一定數量的Tasktracker[?4],Jobtracker通常運行在和名稱節點相同的主機上。用戶將MapReduce 作業發送給Jobtracker所在集群的其他機器上分割工作,集群中其他的空閑機器,每個機器運行一個Tasktracker,Tasktracker與Jobtracker通信,在可能的情況下, Jobtracker給它們分配Map或Reduce任務。
3.2 Phoenix(1)平臺介紹
Phoenix(http://mapreduce.stanford.edu/)作為斯坦福大學EE382a課程[?5]的一類項目,由斯坦福大學計算機系統實驗室開發。Phoenix[?6]是為達到共享內存系統的目的,對Google MapReduce的一種實現方式。Phoenix對MapReduce的實現原則和最初由Google 實現的MapReduce基本相同。不同的是,它在集群中以實現共享內存系統為目的,共享內存能最小化由任務派生和數據間的通信所造成的間接成本。Phoenix可編程多核芯片或共享內存多核處理器(SMPs和 ccNUMAs),用于數據密集型任務處理。
(2)工作流程
Phoenix系統包括一個簡單的應用程序編程接口(Application Programming Interface,API)和一個高效運行時系統,該API對應用程序的程序員是可見的,高效的運行時系統能夠自動管理線程的創建、動態任務調度、數據分區、跨處理器節點的容錯。Phoenix使用線程創建并行化的Map和Reduce任務,給可用的處理器動態調度任務,為了實現負載均衡和最大化吞吐量,通過調整任務粒度和并行任務的分配來進行局部性管理。
?
| ? |
|
| 圖3Phoenix運行時系統的基本數據流[?6] |
?
圖3顯示了Phoenix運行時系統工作的基本流程[?6],運行時由調度器控制,調度器由用戶代碼進行初始化。調度器創建和管理所有運行Map和Reduce任務線程,還管理用于任務通信的緩沖區。程序員通過scheduler_args_t結構體來初始化調度器需要的所有數據和函數指針,初始化完成后,調度器判定用于計算的內核數量,對于每一個內核,它派生一個線程,動態分配一定數量的Map和Reduce任務[?6]。
3.3 Disco(1)平臺介紹
Disco(http://discoproject.org/)是由Nokia研究中心開啟的,基于MapReduce的分布式數據處理框架,核心部分由并行性很高的Erlang語言開發,外部編程接口為Python語言。Disco是一個開放源碼的大規模數據分析平臺,支持大數據集的并行計算,能運行在不可靠的集群計算機上。Disco可部署在集群和多核計算機上,還可部署在Amazon EC2上。
(2)工作流程
Disco基于主/從(Master/Slave)架構,總體設計架構如圖4所示[?7]:
?
| ? |
|
| 圖4?Hadoop運行MapReduce作業工作原理[?7] |
?
Disco工作流程主要包括5個部分:
①Disco用戶使用Python腳本開始Disco作業;
②作業請求通過HTTP發送到主機;
③主機是一個Erlang進程,通過HTTP接收作業請求;
④主機通過SSH啟動每個節點處的從機;
⑤從機在Worker進程中運行Disco任務。
客戶端進程是一些Python程序,使用函數disco.job()向Master提交作業;主機Master接收作業,并將它們添加到作業隊列中,以便進行調度;當集群中的節點可用時,Master啟動集群中的Slave機器,Slave機器在各自的節點處啟動和監控所有的進程;Workers用于執行提交作業中的具體任務,Workers的輸出位置被發送到Master。Disco在每個從機服務器節點上運行一個HTTP服務器,當Worker和輸入運行在不同節點時,便于數據的遠程訪問。用戶可以限制每個節點上并行運行的Worker數量,根據集群中的可用CPU和磁盤資源,指定盡可能多的任務。
3.4 Mars(1)平臺介紹
一些研究者正在將MapReduce架構擴展到圖形處理器(Graphic Processing Units,GPUs)上實現,香港科技大學的He 等[?8],與微軟和新浪合作,在單GPU上開發了Mars(http://www.cse.ust.hk/gpuqp/Mars.html)。Mars是基于圖形處理器(GPUs)對Google MapReduce的一個實現,目前已經包含字符串匹配、矩陣乘法、倒排索引、字詞統計、網頁訪問排名、網頁訪問計數、相似性評估和K均值等8項應用,能夠在32位與64位的Linux平臺下運行[?9]。
(2)工作流程
Mars和基于GPU的MapReduce框架相似,也包括Map和Reduce兩個階段,GPU上Mars的基本工作流程如圖5所示[?8]:
?
| ? |
|
| 圖5?GPU上Mars的基本工作流程[?8] |
?
在開始每個階段之前,Mars初始化線程配置,包括GPU上線程組的數量和每個線程組中線程的數量。Mars在GPU內使用大量的線程,在運行時系統的時候,任務均勻分配給線程,每個線程負責一個Map或Reduce任務,以小數量的key/value pairs作為輸入,并通過一種無鎖的方案來管理MapReduce框架中的并發寫入。
Mars的工作流程主要有7個操作步驟:
①在主存儲器中輸入key/value對,并將它們存儲到數組;
②初始化運行時的配置參數;
③復制主存儲器中的輸入數組到GPU設備內存;
④啟動GPU上的Map階段,并將中間的key/value對存儲到數組;
⑤如果noSort選擇F,即需要排序階段,則對中間結果進行排序;
⑥如果noReduce是F,即需要Reduce階段,則啟動GPU上的Reduce階段,并輸出最終結果,否則中間結果就是最終結果;
⑦復制GPU設備存儲器中的結果到主存儲器。
在上述步驟中,①②③和⑦的操作由調度器來完成,調度器負責準備數據輸入,在GPU上調用Map和Reduce階段,并將結果返回給用戶。
4 主要實現平臺的比較分析 4.1 編程語言(1)Hadoop
Hadoop是采用Java開發的,所以能很好地支持Java語言編寫的MapReduce作業,但在實際應用中,有時候由于要用到非Java的第三方庫或者其他原因,需采用C/C++或其他語言編寫MapReduce作業,這時候可能要用到Hadoop提供的一些工具。若用C/C++編寫MapReduce作業,可使用Hadoop Streaming[?10]或Hadoop Pipes[?2,?11]工具;若用Python編寫MapReduce作業,可以使用Hadoop Streaming或Pydoop[?12,?13]工具;若使用其他語言,如Shell腳本、PHP、Ruby等,可使用Hadoop Streaming。
Java是 Hadoop支持的最好最全面的語言,而且提供了很多工具方便程序員開發。Hadoop流(Hadoop Streaming)使用Unix標準流作為Hadoop和程序之間的接口,其最大的優點是支持多種編程語言,只要編寫的MapReduce程序能夠讀取標準輸入,并寫到標準輸出,但效率較低,Reduce 任務需等到Map 階段完成后才能啟動。Hadoop管道(Hadoop Pipes)是Hadoop MapReduce的C++接口的代稱,與流不同,流使用標準輸入和輸出讓Map和Reduce節點之間相互交流,管道使用sockets作為tasktracker與C++編寫的Map或者Reduce函數的進程之間的通道。Pydoop是專門為Python程序員編寫MapReduce作業設計的,底層使用了Hadoop Streaming接口和libhdfs庫。
(2)Phoenix
目前,Phoenix能夠提供C和C++的應用程序編程接口,類似的API也可以被定義成像Java或者C#這樣的語言[?6]。Phoenix API包括兩部分函數集:第一個函數集由Phoenix提供,可用于應用程序代碼中來初始化系統和發出輸出對;第二部分包括程序員自定義函數。
(3)Disco
Disco平臺的核心部分由并行性能很高的Erlang語言開發,其外部編程接口為易于編程的Python語言。Disco代碼風格指南[?14]包含了Disco代碼庫的編碼約定:對于Erlang而言,除另有規定外,一般采用Erlang編程規則[?15];對于Python,除了另有規定外,采用PEP 8準則[?16]。
(4)Mars
目前Mars提供了C和C++的應用程序編程接口API,和已有的MapReduce框架相似,Mars也有兩種APIs集:一種是系統提供的APIs,用戶可以通過調用庫來使用;另一種是用戶提供的APIs,該部分由用戶實現[?8]。Mars當前版本可運行在32位和64位的Linux系統上,支持最新的CUDA SDK 2.3。
上述4種平臺的API支持的編程語言比較如表2所示:
| 表2?MapReduce不同實現平臺編程語言 |
(1)Hadoop
Hadoop平臺搭建完成后,在一個全配置的集群中,運行Hadoop意味著在集群的不同機器上運行一組守護進程(daemons),這些進程包括:名稱節點(NameNode);數據節點(DataNode);次名稱節點(Secondary NameNode);作業跟蹤節點(JobTracker);任務跟蹤節點(TaskTracker)。
從HDFS分布式存儲的角度來說,集群中的節點由一個 NameNode 和若干個 DataNode組成,另有一個 Secondary NameNode作為NameNode的備份;從MapReduce分布式計算的角度來說,集群中的節點由一個 JobTracker 和若干個 TaskTracker 組成。典型Hadoop集群的拓撲結構如圖6所示[?17]:
?
| ? |
|
| 圖6?典型Hadoop集群拓撲結構[?17] |
?
Hadoop的分布式存儲和分布式計算都采用了主/從結構,NameNode和JobTracker的守護進程運行在主節點上,DataNode和TaskTracker運行在從節點上,TaskTracker 必須運行在 DataNode 上,便于數據的本地計算,JobTracker 和 NameNode 則無須一定在同一臺機器上。
(2)Phoenix
Phoenix系統包括一個簡單的API和一個高效的運行時系統,該API對應用程序的程序員是可見的,高效的運行時系統能夠自動管理線程創建、動態任務調度、數據分區、跨處理器節點的容錯。運行時系統的實現是建立在PThread[?18]之上的,也可方便地移植到其他共享內存線程庫上。
(3)Disco
Disco平臺由分布式存儲系統DDFS(Disco Distributed File System)和MapReduce框架組成,DDFS與計算框架是高度耦合的,DDFS架構如圖7所示[?19]:
?
| ? |
|
| 圖7?DDFS的架構[?19] |
?
DDFS嵌入到Disco內,有一個Master節點和多個存儲節點,每個存儲節點由一組磁盤或者卷宗組成(vol0…volN),它們分別掛載在DDFS_DATA/vol0 …DDFS_DATA/volN上。每個卷宗下面有兩個文件tag 和 blob,分別用于存儲標記 tag(相當于key)和標記對應的值(即value)。DDFS會監控各個節點上的磁盤使用情況,每隔一段時間進行負載均衡。
(4)Mars
Mars在多核架構模型基礎上設計,提供了一個小的APIs集,這些和基于CPU的MapReduce相似。Mars運行時為Map或Reduce任務初始化大量的GPU線程,并為每個線程自動分配少量的key/value對來運行任務。由于數據分析任務涉及到大量的文本處理,Mars的APIs還設計了一個高效的字符串庫。
4.3 功能特點(1)Hadoop
Hadoop是一個開源框架,通過在大規模集群計算機中使用簡單的編程模型,可編寫和運行分布式應用程序處理大規模數據,是目前應用廣泛的開源并行編程框架。
Hadoop具有諸多優點:
①良好的擴展性:通過簡單增加集群節點,可處理更大規模的數據集;
②可靠性:Hadoop致力于運行在一般商用硬件上,其架構假設硬件會頻繁失效,它可以從容地處理大多數故障;
③高效性:Hadoop集群的存儲和計算能力非常強,適合有超大數據集的應用程序;
④經濟性:Hadoop運行在一般商用機器構成的大型集群上或如亞馬遜彈性計算云(EC2)等云計算服務器之上;
⑤易用性:Hadoop方便、簡單,用戶可快速搭建自己的Hadoop集群,并編寫出高效的并行代碼。
但是Hadoop也存在一些不足,由于系統開銷等原因,處理小規模數據的速度不一定比串行程序快,而且單機處理數據的性能較低;若計算時產生的中間結果文件非常大,Reduce過程需要通過遠程過程調用來獲取中間結果文件,這樣會加大網絡傳輸開銷;作為一個比較新的項目, Hadoop在很多方面還需提升,包括穩定性、易用性、可維護性、可測試性等,特別是在MapReduce層,還未解決線性擴展問題。
(2)Phoenix
Phoenix在共享內存系統上實現了MapReduce, 利用共享內存緩沖區實現通信,從而避免了因數據復制產生的開銷,但Phoenix也存在不能自動執行迭代計算、沒有高效的錯誤發現機制等不足之處[?20]。
(3)Disco
Disco是一個開源的大規模數據分析平臺,由一個Master 服務器和一系列Worker節點組成,其中Master和Worker之間采用基于輪詢[?21]的通信機制,使用HTTP的方式傳輸數據。Master 服務器時刻跟蹤用戶應用,負責任務調度與分配,保存與應用相關的輸入數據、中間值和最終結果。Worker節點則負責執行Map與Reduce任務,但是由于輪詢的時間間隔不好確定,若時間間隔設置不當,則會顯著降低程序的執行性能[?20]。
(4)Mars
Mars是基于GPUs的MapReduce實現,該框架旨在為開發者提供一個基于GPU的通用框架以完成準確、高效、簡單的實施數據和計算密集型任務。由于GPU線程不支持運行時動態調度,所以給每個GPU線程分配的任務是固定的,若輸入數據劃分不均勻,將導致Map或Reduce階段的負載不均衡,使得整個系統性能急劇降低。同時由于GPU不支持運行時在設備內存中分配空間,需要預先在設備內存中分配好輸入數據和輸出數據的存放空間,但是Map和Reduce階段輸出數據大小是未知的,并且當多個GPU線程同時向共享輸出區域中寫數據時,易造成寫沖突[?20]。
MapReduce不同的實現平臺和研究成果有著不同的功能和優缺點,主要實現平臺功能特點比較如表3所示:
| 表3?不同實現平臺功能特點比較 |
(1)Hadoop
Hadoop可充分利用集群的優勢進行高速運算和存儲,由于Hadoop在處理大規模數據上的優勢,基于Hadoop的應用非常多,尤其是在互聯網領域。Yahoo!通過集群運行Hadoop,以支持廣告系統和 Web搜索研究,并將Hadoop廣泛應用于日志分析、廣告計算、科研實驗中[?22];Amazon的搜索門戶A9.com基于Hadoop完成了商品搜索的索引生成[?23];互聯網電臺和音樂社區網站Last.fm使用Hadoop集群進行日志分析、A/B測試評價、Ad Hoc處理和圖表生成等日常作業[?24];著名SNS網站Facebook使用Hadoop,存儲日志數據,支持其上的數據分析和機器學習,還用Hadoop構建了整個網站的數據倉庫,進行日志分析和數據挖掘[?25]。淘寶是國內最先使用Hadoop的公司之一,其Hadoop系統用于存儲并處理電子商務交易的相關數據[?26];百度使用Hadoop進行搜索日志分析和網頁數據挖掘工作,百度在Hadoop上進行廣泛應用并對它進行改進和調整,同時贊助了HyperTable[?27]的開發。
Hadoop已取得非常突出的成績,隨著互聯網的發展,新的業務模式還將不斷涌現,其應用也會從互聯網領域向電信、銀行、電子商務、生物制藥等領域拓展。
(2)Phoenix
Phoenix是在共享內存系統上實現的MapReduce,其應用主要包括:
①詞頻統計:統計文件集中每個詞的共現頻率;
②反向鏈接:創建HTML文件反向鏈接指數;
③矩陣乘法(Matrix Multiply):密集型整數矩陣乘法;
④字符串匹配:通過鍵值搜索文檔;
⑤K-means:通過K均值迭代聚類算法,將三維數據點分成組;
⑥PCA(Principal Components Analysis):主成分分析矩陣;
⑦直方圖:在一組圖像中判定每個RGB分量的頻率;
⑧線性回歸(Linear Regression):計算一組點的最佳擬合線[?6]。
(3)Disco
作為一個分布式處理的輕量級MapReduce實現框架,Disco的用途主要是:解析、格式化、日志分析、聚類、概率建模、數據挖掘、全文索引和機器學習。目前Disco正被用于多種行業,解決具有挑戰性的問題,涉及到大規模數據。Disco商業級的應用如:在Allston Trading,Disco用于各種各樣的歷史研究和現代金融領域的實時舉措;在Chango,Disco是分析和競標廣告市場的核心組件;在Nokia,最大的數據分析集群運行的就是Disco,對Nokia龐大的移動數據資產進行日常分析;在Zemanta,Disco用來處理關于維基百科和維基共享資源圖像的上下文數據[?28]。
(4)Mars
Mars是一個GPUs上的MapReduce框架,包含了不同種類的Web數據分析如Web文檔搜索(字符串匹配和倒排索引),Web文檔處理(K均值、相似性評估和矩陣乘法)和Web日志分析(詞頻統計、網頁訪問計數和網頁訪問排名)等應用。由于Mars的編程接口是為圖形處理而專門設計的,底層硬件比較復雜,造成用戶編程難度較大,不利于其推廣使用[?20]。
| 表4?主要實現平臺比較 |
表4顯示了MapReduce不同實現平臺,在使用難易程度、普及程度及應用領域方面的比較。這4種實現平臺,除Hadoop外,其他實現都沒有得到廣泛應用。
5 結 語現實世界很多實例都可用MapReduce編程模型來表示,MapReduce作為一個通用可擴展的并行處理模型,可有效地處理海量數據,不斷地從中分析挖掘出有價值的信息。MapReduce封裝了并行處理、負載均衡、容錯、數據本地化等技術難點的細節,對于沒有并行或者分布式系統開發經驗的程序員而言,MapReduce庫也易于使用。MapReduce編程模型已成功應用于多個領域,但是,當前有關MapReduce的研究主要集中在其應用上,對于算法及算法效率提高和優化等方面的研究較少,還有待于重視,以使MapReduce能更好地被應用。
參考文獻 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].?電子學報,?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-淘寶共享數據平臺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] |
轉載于:https://www.cnblogs.com/zhizhan/p/4883373.html
總結
以上是生活随笔為你收集整理的MapReduce原理及其主要实现平台分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZeroClipboard的时代或许已经
- 下一篇: java字节码忍者禁术