我已经为我的应用程序实现了二级排序。
File-1 File-2 File-3
------ ------ ------
name,pos,r,value name,pos,r,value name,pos,r,value
aa,1,0,123 aa,2,1,1 aa,3,1,11
bb,1,0,234 aa,2,2,34 aa,3,2,12
aa,2,3,55 aa,3,3,13
bb,2,1,99 bb,3,1,15
bb,2,2,54 bb,3,2,19
bb,2,3,32 bb,3,3,13
对于文件1中的每个记录,在文件2和文件3中将分别有三个记录。
复合键是:: name +(pos + r)
自然键是::名称
排序顺序基于组合键。基于(pos + r)的升序
预期输出为
特定名称(aa)的File1内容,其后是所有file2内容(三行aa,基于pos + r排序),然后是文件三内容(三行aa,基于pos +排序)
aa,123,1,34,55,11,12,13
bb,234,99,54,32,15,19,13
我已经使用setGroupingComparatorClass,setSortComparatorClass和自定义分区程序在二级排序中实现了此功能。
我的怀疑是:
1)如何为这种情况添加合并器。
所有 map 输出(基于
自然键)转移到减少机器。
2)如果添加了合并器,排序的方式和时间将发生,以便
reduce函数以正确的顺序从所有映射器接收输出。
在每个映射之后,再在化简器端对所有组合器进行排序
输出?
最佳答案
建议您好好经历
http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/
请使自己了解码比较器和排序比较器,并适当使用它。
关于hadoop - 将合并器用于mapreduce二级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431128/