将组合器用于mapreduce二级排序

时间:2017-11-22 09:35:55

标签: hadoop mapreduce bigdata cloudera-cdh combiners

我已经为我的应用程序实现了二级排序。

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

对于File-1中的每条记录,File2和File3各有三条记录。

复合键是:: name +(pos + r)

自然键是:: name

排序顺序基于复合键。基于(pos + r)

的升序

预期输出

特定名称(aa)的File1内容,后跟所有file2内容(基于pos + r排序的三行aa),然后是文件三内容(基于pos +排序的三行aa)

aa,123,1,34,55,11,12,13

BB,234,99,54,32,15,19,13

我使用setGroupingComparatorClass,setSortComparatorClass和自定义分区器在二级排序中实现了这一点。

我的怀疑是:??

1)如何为此场景添加组合器。

  • 根据我的理解,分组和排序发生在 减速器阶段一次所有地图输出(基于的分区) 自然键)被转移到减少机器。

2)如果添加了合并器,那么排序将如何以及何时发生    reduce函数以正确的顺序接收来自所有映射器的输出。

  • 地图输出是否会被排序两次,一次是在执行的组合器中  在每个地图之后,再次在减速机侧对所有组合器进行排序  输出?

1 个答案:

答案 0 :(得分:0)

建议你好好经历 http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

  1. 在mapper上进行排序。
  2. 合并(排序和合并)在reducer上发生。
  3. Combiner是一个额外的图层,您尝试在Mapper上进行缩小。
  4. reducer始终接收给定键的所有给定值。
  5. Mapper以排序方式发送给定键的值。
  6. 请自行了解组比较器和排序比较器并正确使用它。