MapReduce執行過程
阿新 • • 發佈:2020-12-28
- MapReduce之
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階段結束。