关于在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>对。
具体地你们可以追一下源码,或者构造出一些合适的输入文件,以验证这个解释。
从而对一组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>对。
具体地你们可以追一下源码,或者构造出一些合适的输入文件,以验证这个解释。
相关文章推荐
- 在WEB程序中使用.NET Remoting的IpcChannel时注意事项(关于“拒绝访问”问题的解决)
- C#项目关于程序中使用管理员权限的程序的打包,需要注意的事项
- 关于笔记本使用的几点注意事项
- 一个FTP上传组件及使用注意事项
- 关于使用READ TABLE语句的几点注意事项
- 论使用程序处理大规模文件的注意事项
- 关于Java开发中使用Oracle数据库的一点注意事项
- 关于U盾使用的一些注意事项
- 关于使用READ TABLE语句的几点注意事项...(原文来源于网络)
- ASP.NET学习笔记[2] - 关于使用Master.Page的几点注意事项
- 关于在vc6后续版本MFC程序中使用ActiveX组件
- 关于Ibatis 2.3使用的注意事项
- atl 组件应用程序使用的注意事项
- 使用静态库时需要注意的事项(gcc下程序调用静态库编译命令:主文件必须在静态库前面!)
- 关于使用存储过程的一些好处以及注意事项
- 关于使用存储过程的一些好处以及注意事项
- 关于使用READ TABLE语句的几点注意事项...(原文来源于网络)
- 关于在oracle中是使用索引的几点注意事项
- 关于mojoportal在局域网或单机使用时注意事项
- 使用.net框架应用C#语言开发窗口程序的一些注意事项