hadoop将分区分配给reducer

时间:2013-04-26 09:06:16

标签: hadoop hadoop-partitioning

出于负载平衡的原因,我想在Hadoop环境中创建比reducers更多的分区。有没有办法将分区分配给特定的Reducer,如果有,我可以在哪里定义它们。我写了一个单独的分区程序,现在想要解决具有特定分区的特定reducer。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为减速器完成分配。创建的分区数量与所选的减速器数量一样多。您可以通过

选择减速机的数量
job.setNumReduceTasks(n);

数字n不必受物理减速器数量的限制。只有一些等待才能获得下一个减少时段。在您的分区代码中,您可以实现将密钥分配给特定分区所需的逻辑。

但是,我没有看到超出物理上可用的减速器插槽数量而实现任何效率,因为它只会导致等待下一个减少插槽。

答案 1 :(得分:0)

Hadoop不适合这种控制。

this优秀书籍第43-44页解释。程序员几乎无法控制:

  1. 运行映射器或缩减器的位置(即群集中的哪个节点)。
  2. 当映射器或缩减器开始或结束时。
  3. 特定映射器处理哪些输入键值对。
  4. 特定减速机处理哪些中间键值对。(您想要的是什么)
  5. BUT

    您可以通过实施设计巧妙的自定义Partitioner来更改数字4,该自定义{J}按您希望的方式拆分数据,以便按预期将数据分配到Reducer。在第3.3章中查看他们如何实现自定义分区器来计算相对频率。