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