Hadoop 2.2 - 结合减速机输出

时间:2014-04-23 22:25:44

标签: java hadoop mapreduce

我的地图/减少作业输出表格

的行
Key1 5
Key2 8
Key3 4
Key1 7
Key3 3

我想汇总这些结果,以便按键得到值的总和。 如下所示:

Key1 12 (5 + 7)
Key2 8
Key3 7 (4 + 3)

天真的方法是简单地将另一个Map / Reduce作业链接到第一个后面,但效率很低,因为你的I / O比必要的多两倍,开销等等。所以我想避免这个解决方案。 / p>

执行此操作的最佳方法可能是map -> reduce1 -> reduce2,其中reduce1的输出是reduce2的输入。不幸的是,这似乎是不可能的(例如,见Chaining Multi-Reducers in a Hadoop MapReduce job)。 我也查看了ChainReducer,但它没有任何帮助,因为它不允许多个减少步骤。

那你怎么去呢?我可以使用Hadoop 2.X中的新内容吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

如果没有mapper,则无法使用多个Reducer。我建议你应该尝试在一个map-reduce作业中结合map-reduce逻辑,如果可能的话。否则身份映射器将只是解决方案。

答案 1 :(得分:0)

我认为你也可以写一份减速机工作。但我还没试过。你可以尝试一下。

您还可以为此编写一个仅限身份地图的作业,而无需指定

job.setNumReduceTasks(0);

为什么呢 在编写设置为job.setNumReduceTasks(0);的Map作业时,输出将在multipe文件中(输出文件取决于map的no)。

如果我们没有指定job.setNumReduceTasks(0);,即使我们没有编写Reducer,也会默认运行身份缩减器。结果存储在一个part-r-00000文件中