【发布时间】:2014-02-22 23:24:49
【问题描述】:
我有一个 map reducer 作业,它必须在多个输出中输出,我在这个例子中使用了 multipleOutputFormat:http://grepalex.com/2013/05/20/multipleoutputs-part1/
挑战如下:
- 如果我的分区器向每个减速器发送一个键(假设键是指单独的输出文件),那么我的一些具有大量数据的减速器将永远占用。
- 如果我的 partitioner 随机发送每个 reducer (theKey+randomNumber),然后许多 reducer 写入多个输出,我就有 IO 问题。
作为解决方案:
选项1:根据重量将键分配给减速器。所以所有的减速器都有相同的负载。 (1个大key被发送到5个不同的reducer,6个小key被发送到单个reducer)
选项 2:再次根据权重分配键,但确保减速器只能取一个键。 (1 个大键被发送到 5 个不同的,但 6 个小键也被发送到单独的减速器)
优点和缺点:
- 在选项 1 中:我有平衡减速器,但一些减速器写入不同的文件(小键)。
- 在选项 2 中:我有不平衡的减速器,但限制了减速器的最大负载,并且每个减速器都写入自己的文件。
这两个选项都在合理的时间内运行。我需要一些关于我应该选择哪一个的建议。
谢谢
【问题讨论】:
-
如果您不需要按键对结果进行分组,那么使用 reducer 有什么意义?让mapper直接写到目的地。
标签: hadoop mapreduce reduce hadoop-partitioning