我有一个 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 中:我有不平衡的减速器,但限制了减速器的最大负载,并且每个减速器都写入自己的文件。
这两个选项都在合理的时间内运行。我需要一些关于我应该选择哪一个的建议。
谢谢