3

我有一个 map reducer 作业,它必须在多个输出中输出,我正在使用 multipleOutputFormat,如本例所示:http: //grepalex.com/2013/05/20/multipleoutputs-part1/

这是挑战:

  • 如果我的分区器向每个减速器发送一个键(假设键是指单独的输出文件),那么我的一些具有大量数据的减速器将永远占用。
  • 如果我的分区器随机发送每个减速器(theKey+randomNumber),那么许多减速器写入多个输出,我有 IO 问题。

作为解决方案:

  • option1:根据权重为reducers分配key。所以所有的减速器都有相同的负载。(1 个大键被发送到 5 个不同的减速器,而 6 个小键被发送到单个减速器)

  • 选项2:再次根据权重分配键,但确保减速器只能取一个键。(1 个大键被发送到 5 个不同的,但 6 个小键也被发送到单独的减速器)

优点缺点:

  • 在选项 1 中:我有平衡减速器,但一些减速器写入不同的文件(小键)。
  • 在选项 2 中:我有不平衡的减速器,但限制了减速器的最大负载,并且每个减速器都写入自己的文件。

这两个选项都在合理的时间内运行。我需要一些关于我应该选择哪一个的建议。

谢谢

4

2 回答 2

0

选项 1 似乎是最好的选择。两个选项的执行时间将接近相同,但选项 1 将运行每个 reducer 所需的开销工作降至最低。

于 2014-02-04T19:16:53.650 回答
0

opt 2 更好还有另一种选择:多添加一列作为键,在输入数据时只使用列,因此不需要更多的随机键。

于 2016-03-17T08:17:22.210 回答