Hadoop實(shí)現(xiàn)了Google的MapReduce編程模型。MapReduce是一種分布式計(jì)算模型,也是Hadoop的核心。它是開源的,任何人都可以使用這個(gè)框架進(jìn)行并行編程?;谶@個(gè)模型,分布式并行程序的編寫變得非常簡(jiǎn)單。
邏輯模型
MapReduce把運(yùn)行在大規(guī)模集群上的并行計(jì)算過程抽象為兩個(gè)函數(shù):Map和Reduce, 也就是映射和化簡(jiǎn)。簡(jiǎn)單說,MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。Map把任務(wù)分解成為多個(gè)任務(wù),Reduce把分解后多任務(wù)處理的結(jié)果匯總起來,得到最終結(jié)果。
適合用MapReduce處理的任務(wù)有一個(gè)基本要求:待處理的數(shù)據(jù)集可以分解成許多小的數(shù)據(jù)集,而且每一個(gè)小數(shù)據(jù)集都可以完全并行地進(jìn)行處理。
一個(gè)MapReduce操作分為兩個(gè)階段:映射階段和化簡(jiǎn)階段。
在映射階段,MapReduce框架將用戶輸入的數(shù)據(jù)分割為M個(gè)片斷,對(duì)應(yīng)M個(gè)Map任務(wù)。每一個(gè)Map操作的輸入是數(shù)據(jù)片斷中的鍵值對(duì)<K1,V1>集合,Map操作調(diào)用用戶定義的Map函數(shù),輸出一個(gè)中間態(tài)的鍵值對(duì)<K2,V2>集合。接著,按照中間態(tài)的K2將輸出的數(shù)據(jù)集進(jìn)行排序,并生成一個(gè)新的<K2,list(V2)>元組,這樣可以使得對(duì)應(yīng)同一個(gè)鍵的所有值的數(shù)據(jù)都在一起。然后,按照K2的范圍將這些元組分割為R個(gè)片斷,對(duì)應(yīng)Reduce任務(wù)的數(shù)目。
在化簡(jiǎn)階段,每一個(gè)Reduce操作的輸入是一個(gè)<K2,list(V2)>片斷,Reduce操作調(diào)用用戶定義的Reduce函數(shù),生成用戶需要的鍵值對(duì)<K3,V3>進(jìn)行輸出。