put组合器在mapreduce二次排序中的应用

pkwftd7m  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(336)

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

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)的升序
预期输出为
file1特定名称的内容(aa)后跟所有file2内容(三行aa根据pos+r排序),然后后跟file三行内容(三行aa根据pos+排序)
aa、123、1、34、55、11、12、13
bb,234,99,54,32,15,19,13岁
我已经用setgroupingcomparatorclass、setortcomparatorclass和custompartitioner在二次排序中实现了这一点。
我的疑问是:??
1) 如何在此场景中添加组合器。
根据我的理解,分组和排序发生在reducer阶段,一旦所有map输出(基于自然密钥进行分区)被转移到reduce机器。
2) 如果添加了组合器,那么排序将如何进行以及何时进行,以便reduce函数以适当的顺序接收来自所有Map器的输出。
map输出是否会被排序两次,一次在combiner中,在每个map之后执行,另一次在reducer端对所有combiner输出进行排序?

k97glaaz

k97glaaz1#

我建议你仔细检查一下http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/
排序发生在Map器上。
合并(排序和合并)发生在reducer上。
combiner是一个额外的层,您可以尝试在mapper上减少。
reducer总是接收给定键的所有给定值。
Map器以排序方式发送给定键的值。
请让自己了解组比较器和排序比较器,并适当使用它。

相关问题