
step1 input
InputFormat讀取數據,將數據轉換成<key ,value>對,設置FileInputFormat,默認是文本格式(TextInputFormat)
step2 map
map<KEYIN, VALUEIN, KEYOUT, VALUEOUT> 默認情況下KEYIN:LongWritable,偏移量。VALUEIN:Text,KEYOUT與VALUEOUT要根據我們的具體的業務來定。
step3 shuffle
map輸出到reduce之前這個階段是mr的shuffle階段。
map輸出的<key , value>對首先放在內存中,當達到一定的內存大小,就會溢寫(spill)到本地磁盤中,可能有很多文件。spill過程有兩個操作,分區(partition)和排序(sort)。當map task結束后可能有很多的小文件,spill。那么我們需要對這些文件合並(merge),排序成一個大文件。此時map階段才結束。
Reduce task 會到Map Task運行的機器上,拷貝要處理的數據。然后合並(merge),排序,分組(group)將相同key 的value 放在一起,完成了reduce 數據輸入的過程。
step4 reduce
reduce<KEYIN, VALUEIN, KEYOUT, VALUEOUT>,map輸出的<key , value>數據類型與reduce輸入<key , value>的數據類型一致。
接下來就是執行Reducer 定義的方法了
step5 output
TextOutputFormat
最后將結果輸出到文件系統上,每個< key , value >對, key與value中間分隔符為\t,默認調用 key 和 value 的 toString() 方法。
我們可以在map端輸出文件壓縮,可設置,combiner(map端的reduce)。
