您的位置:首页 > 运维架构

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

2017-12-20 15:53 405 查看
众所周知,在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>对。

具体地你们可以追一下源码,或者构造出一些合适的输入文件,以验证这个解释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mapreduce hadoop