关于在hadoop的mapreduce程序中使用GroupingComparator组件的注意事项

众所周知,在mr程序中使用GroupingComparator组件是为用于在mapper输出的<k,v>对中规定相同的key

从而对一组k相同的<k,v>对调用一次reduce方法,以第一个<k,v>对的k作为reduce方法的key,并将这一组v用Iterable<T> values传入。


但是在使用该组件时发现问题:(本来想详细地描述一下场景和现象的,不过实在耗时间,我就简略说重点了)


有些符合条件的<k,v>对并没有按照我加入的GroupingComparator组件中定义的规则,

看作相同的key,并按照<key,values>调用一次reduce方法。而是调用了多次reduce方法,

根据输入的不同而不同,并不固定。

这一问题在网上没有找到详细地解释。书上对GroupingComparator组件的工作机制也没有详细地说明。



经过多次实验发现:


GroupingComparator组件在判断一组<k,v>对有多少可以看作相同key的过程中,

并不是遍历全部的<k,v>对后才做出判断,而是先比较下一个<k,v>对,

若此两个k可看作相同,才继续比较下一个,又相同才又比较下一个...

比较到不同了,就不继续比较了,

直接根据前得到的一组<k,v>对就调用reduce方法了。

下一次判断从上次比较为不相同的一个<k,v>对开始。


所以出现问题的地方就是:

哪些key可看作相同的<k,v>对没有排列在一起,若中间插入了其他key不同的<k,v>对,

则在比较到不同时就调用reduce方法了,即使后面仍有相同的<k,v>对。



具体地你们可以追一下源码,或者构造出一些合适的输入文件,以验证这个解释。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值