章昱 鐘茂生 童維勤 嚴(yán)偉安
(1.江西師范大學(xué)計算機信息工程學(xué)院 江西省南昌市 330027 2.上海大學(xué) 上海市 200444)
大數(shù)據(jù)的批處理技術(shù)應(yīng)用于大規(guī)模靜態(tài)數(shù)據(jù)集的離線計算和處理,架構(gòu)設(shè)計的初衷是為了解決大規(guī)模、非實時數(shù)據(jù)計算,以吞吐量大為顯著特征。在大數(shù)據(jù)批處理技術(shù)包括兩種計算模型:MapReduce 計算模型和DAG 模型。
MapReduce 的設(shè)計理念是“計算向數(shù)據(jù)靠攏”,而不是“數(shù)據(jù)向計算靠攏”。MapReduce 將復(fù)雜的、運行于大規(guī)模集群上的并行計算過程高度地抽象到了兩個函數(shù):Map()和Reduce()。使用簡單的編程接口,不需要掌握分布式并行編程細(xì)節(jié),可以很容易的將自己的程序運行在分布式系統(tǒng)上,完成海量數(shù)據(jù)的計算。
MapReduce 編程模型的示意圖如圖1 所示。其中,Map操作是對一部分原始數(shù)據(jù)進行對應(yīng)的操作,每個Map 操作都針對不同的原始數(shù)據(jù),因此Map 與Map 之間是相互獨立的,這使得他們可以充分的并行化。Reduce 操作是對每個Map 所產(chǎn)生的一部分中間結(jié)果進行合并操作,每個Reduce所處理的Map 中間結(jié)果是互不交叉的,所有Reduce 產(chǎn)生的最終結(jié)果經(jīng)過簡單連接就形成了完整結(jié)果集。

圖1:MapReduce 編程模型示意圖
開發(fā)者只需要編寫兩個函數(shù):
Map(in_key , in_value) -> {( key, value) | j = 1 , … , k };
Reduce(key , [ value1 , … , valuem ]) -> ( key , final_value);
Map 的輸入?yún)?shù):in_key 和in_value,它指明了Map 需要處理的原始數(shù)據(jù),Map 的輸出結(jié)果:一組< key , value >對,這是經(jīng)過Map 操作后所產(chǎn)生的中間結(jié)果,用于后續(xù)Reduce的輸入。Reduce 的輸入?yún)?shù):(key , [ value1 , … , valuem ]),此操作是對這些對應(yīng)相同key 的value 值進行歸并操作,Reduce 的輸出結(jié)果:( key , final_value ),所有Reduce 的結(jié)果并在一起就是最終結(jié)果。
下面用一個簡單的實例來對MapReduce 的編程模型進行講解。……