0

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

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 中各有 3 条记录。

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

自然键是 :: 名称

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

预期输出为

File1 特定名称 (aa) 的内容后跟所有 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)如何为此场景添加组合器。

  • 据我了解,分组和排序发生在reducer阶段,一旦所有map输出(基于自然键分区)都转移到reduce机器。

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

  • 地图输出是否会被排序两次,一次在每个地图之后执行的组合器中,然后在归约器端对所有组合器输出进行排序?
4

1 回答 1

0

建议您浏览 http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

  1. 排序发生在 mapper 上。
  2. 合并(排序和合并)发生在减速器上。
  3. 组合器是一个额外的层,您尝试在 Mapper 上减少。
  4. reducer 总是接收给定键的所有给定值。
  5. Mapper 以排序方式发送给定键的值。

请让自己了解组比较器和排序比较器并正确使用它。

于 2017-11-22T10:02:44.317 回答