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文件里面去,最终处理完输出。

数据倾斜:就是其他人忙的要死,他闲的要命。

db2d746d463d93414c324d58f1b26a6b.png

c424619af4e22b4011ad9ed2ea85f783.png

4ced3f076e8e62f7ffe4ac3587345692.png

ca05ed1a9c76b044496ae74e93f717d4.png

combiner :在MAPtask的局部汇总操作,父类是Reducer 区别是combiner在map操作  reducer在reduce操作。(不适合求平均值  适合累加汇总操作)。

169d109deb93fbfafb702a52afcea515.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值