Hadoop- MR的shuffle過程


 

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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM