我的地图/减少作业输出表格
的行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中的新内容吗?
谢谢。
答案 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
文件中