如何在mapreduce中控制mapper结果在发送到reducer之前的排序顺序

gg0vcinb  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(335)

举一个单词计数的例子来解释我要做的事情。
我有3个Map器,每个Map器在3个大的输入文件上生成一个完整的字数计算结果。假设输出为:

Mapper 1 Result:
-------
cat 100
dog 50
fox 10

Mapper 2 Result:
-------
fox 200
pig 5
rat 1

Mapper 3 Result:
-------
dog 70
rat 50
fox 10

请注意,每个结果都是一个完整的字数计数,具有唯一的键,计算给定文件的结果。
现在在reducer方面,我的算法要求只有一个reducer,由于这里讨论的时间有点太长,我希望每个Map器的结果按计数的降序输入reducer,但不执行任何洗牌和排序步骤。i、 e.我希望reducer按以下顺序接收来自每个Map器的结果,而不按键进行任何分组:

cat 100
dog 50
fox 10

fox 200
pig 5
rat 1

dog 70
rat 50
fox 10

i、 e.只需按值的降序(不是键)将每个Map器的结果加载到reducer中

1cosmwyk

1cosmwyk1#

似乎这应该是一个Map唯一的工作,因为你不想洗牌和排序发生。
如果您真的需要使用reduce,那么我建议您需要一个复合键并进行二次排序。
键将包括Map器id、普通键和计数值。您可以对mapper id进行主排序,对count进行次排序。您还需要一个分组比较器,它不对任何内容进行分组(或者只对Map器id和普通键进行分组)。
再次,看看使用reducer所需要做的所有工作,以防止无序排列和排序,这似乎应该是一个只Map的工作,除非输出必须在单个文件中。

相关问题