我的 Map/Reduce 作业输出表格的行
Key1 5
Key2 8
Key3 4
Key1 7
Key3 3
我想汇总这些结果以按键获得值的总和。 所以像这样:
Key1 12 (5 + 7)
Key2 8
Key3 7 (4 + 3)
天真的方法是简单地将另一个 Map/Reduce 作业链接到第一个作业之后,但它效率低下,因为你的 I/O 比必要的多两倍,开销等。所以我想避免这种解决方案。
最好的方法可能是 map -> reduce1 -> reduce2
,其中 reduce1 的输出是 reduce2 的输入。不幸的是,这似乎是不可能的(例如参见 Chaining Multi-Reducers in a Hadoop MapReduce job)。 我也看过ChainReducer但它也无济于事,因为它不允许多个减少步骤。
那么你会怎么做呢?我可以使用 Hadoop 2.X 中的新功能吗?
谢谢。
请您参考如下方法:
没有 mapper 就不可能使用多个 reducer。如果可能的话,我建议您应该尝试将两个 map-reduce 逻辑组合在一个 map-reduce 作业中。否则身份映射器将是唯一的解决方案。