Java中的mapreduce没了_MapReduce的过程总结
MapReduce 分為:
1) MapTask :
1.Read階段:邏輯切片 128M / Maptask 讀數據解析出一個個key/value。
2.Map階段: 把key/value 寫入到map中去(處理業務邏輯)
3.Collect階段:將生成的key/value分區(調用Partitioner)排序,并寫入一個環形內存緩沖區中。
4.溢寫階段:分區寫入到文件且有序。
5.Combine階段:歸并排序,把眾多小文件合并成大文件。
一個大文件邏輯切分成好多片(128mb一片),一片啟動一個map, 多個map之間處理的數據有相同的分區但是處理的不同。有可能第二片里面也有分區1的數據。第一片里也有。
2)Shuffer:Map方法之后,Reduce方法之前的數據處理過程稱之為Shuffle。(和兩個有重合部分)
1.Map的shuffer過程:就是從Map里面寫入到環形緩沖區中要先進行分區然后排序再百分之80的時候溢寫到磁盤中,接著把map之間分區數據歸并排序 (多個有序的小文件形成一個大的有序的文件)然后可壓縮后 再溢寫到磁盤對應的分區上。
2.Reduce的shuffer過程: 把分區數據拷貝到內存緩沖區中(如果不夠就溢寫到磁盤中 )然后進行歸并排序,生成一個大的有序的文件。按照相同key分成一組!之后放到reduce里面去。 (進入到reduce里面的數據,key必須相同)
3)ReduceTask
1.Copy階段:將對應分區下的數據拷貝到reduce,沒有達到內存上限就存到內存當中,如果超過了就存到磁盤中。
2.Merge階段:? 多個文件合并成一個大的文件。
3.Sort階段:然后將大文件排序。
4.Reduce階段:將相同key的拷貝到一個reduce文件里面去,最終處理完輸出。
數據傾斜:就是其他人忙的要死,他閑的要命。
combiner :在MAPtask的局部匯總操作,父類是Reducer 區別是combiner在map操作? reducer在reduce操作。(不適合求平均值? 適合累加匯總操作)。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java中的mapreduce没了_MapReduce的过程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习之路 | PTA乙级—— 10
- 下一篇: java单例方法_Java单例模式