【问题标题】:Hadoop how to allocate to reducers to handle unbalanced load - CustomPartitionHadoop如何分配给reducers来处理不平衡的负载 - CustomPartition
【发布时间】: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


【解决方案1】:

选择 2 更好 还有另一种选择:多加一列作为键,输入数据时只使用列,这样就不需要更多的随机键了。

【讨论】:

  • @mjp66 怎么不是答案?操作员询问使用哪个选项,这个答案建议使用选项 2。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 2012-07-19
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多