MapReduce中reduce端的源码分析

MapReduce中reduce端的源码分析:

父类依然有run方法,依然有上下文,并且在上下文会判断

其实在里边传递的是迭代器对象

reduce端完成三种事情:

①:shuffle,就是拉取数据

②:sort就是排序

③:reduce就是按组计算

 只有在map端才是真正的排序,其他的都是归并排序,内部有序,外部无序

一共做了三件事情:

shuffle的过程:

 

这个迭代器就是reduce端的输入:

 

 排序有比较,分组也有比较

分组比较的结果有两种:等于和不等于

分组的宽度小于排序的宽度

在map端首先看用户有没有设置比较器(排序比较器),如果没有设置就按照默认的比较器进行排序

在reduce端首先看用户有没有设置分组比较器,如果用户没有设置,那么再看有没有设置排序比较器,如果连排序比较器都没有设置,那么就按照默认的比较器来比较。

 

 

在map端调用的是next key value

在reduce阶段调用的是next key

 

 先清空数据

一组中的第一条数据和上一组的最后一条数据之间是没有关系的

 map端的输出是reduce端的输入,map输出会序列化key和value到内存,内存的东西会序列化到磁盘,也是序列化的结果给reduce端计算的时候是需要进行反序列化的。

 先拿出第一条数据,然后再拿出第二条数据与第一条进行比较

reduce端的返回数组:GetCurrentValues 

 

 getcurrentkey直接将key的值返回

getvalues:返回的是iterable

 

 

 

 next key value方法会使用真迭代器

 这里是真迭代器:

这里是假迭代器:

 

 next key is same才会调用这一次方法:这样就调用了源语;相同的key为一组,这一组key调用一次reduce方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值