使用Hadoop mapreduce并行减少

时间:2011-07-23 12:45:06

标签: hadoop mapreduce

我正在使用Hadoop的MapReduce。我有一个文件作为map函数的输入,map函数做了一些事情(与问题无关)。我希望我的reducer能够获取地图的输出并写入两个不同的文件。 我看待它的方式(我想要一个有效的解决方案),我有两种方式:

  1. 1个减速器,它将知道识别不同的情况并写入2个不同的上下文。
  2. 2个并行缩减器,每个都知道识别他的相关输入,忽略另一个,这样每个都会写入一个文件(每个reducer将写入不同的文件)。
  3. 我更喜欢第一种解决方案,因为它意味着我只会过一次地图输出而不是两次并行 - 但如果第一种方式不受支持 - 我会很高兴听到第二个建议的解决方案。

    *注意:这两个最终文件应该是分开的,此时无需加入它们。

2 个答案:

答案 0 :(得分:3)

Hadoop API具有创建名为MultipleOutputs的多个输出的功能,使您的首选解决方案成为可能。

答案 1 :(得分:1)

如果您在地图阶段知道记录必须转到哪个文件,您可以使用特殊键标记地图输出,指定它应该转到哪个文件。例如,如果记录R1必须转到文件1,则输出< 1,R1> ..(1是密钥.​​. file1的符号表示,R1是值)如果记录R2必须转到文件2,你的地图输出将是< 2,R2>。

然后,如果您将map reduce作业配置为仅使用2个reducers ..它将保证所有标记为< 1,_>的记录将被发送到1个reducer和< 2,_>将被发送到另一个。

这比你首选的解决方案更好,因为你仍然只通过你的地图输出一次..同时,它将并行。