Map
階段執行過程1:框架會把輸入文件(夾)劃分爲不少InputSplit,默認,每一個HDFS的Block對應一個InputSplit。經過RecordReader類,把每一個InputSplit解析成一個個<K1,V1>。默認,每一行會被解析成一個<K1,V1>。 2:框架調用Mapper類中的map(...)函數,map函數的形參是<K1,V1>,輸出是<K2,V2>。一個InputSplit對應一個map task。 3:框架對map函數輸出的<K2,V2>進行分區。不一樣分區中的<K2,V2>由不一樣的reduce task處理,默認只有一個分區。 4:框架對每一個分區中的數據,按照K2進行排序、分組。分組指的是相同K2的V2分紅一個組。 5:在map節點,框架能夠執行reduce歸約,此步驟爲可選頂。 6:框架會把map task輸出的<K2,V2>寫入到Linux的磁盤文件中。 至此,整個map階段結束。
MapReduce之reduce
階段執行過程網絡
1:框架對多個map任務的輸出,按照不一樣的分區,經過網絡copy到不一樣的reduce節點,這個過程稱做shuffle。 2:框架對reduce端接收到的相同分區的<K2,V2>數據進行合併、排序、分組。 3:框架調用Reducer類中的reduce方法,輸入<K2,{V2...}>,輸出<K3,V3>。一個<K2,{V2...}>調用一次reduce函數。 4:框架把reduce的輸出保存到HDFS中。 至此,整個reduce階段結束。