出于负载平衡的原因,我想在Hadoop环境中创建比reducers更多的分区。有没有办法将分区分配给特定的Reducer,如果有,我可以在哪里定义它们。我写了一个单独的分区程序,现在想要解决具有特定分区的特定reducer。
提前感谢您的帮助!
答案 0 :(得分:0)
为减速器完成分配。创建的分区数量与所选的减速器数量一样多。您可以通过
选择减速机的数量job.setNumReduceTasks(n);
数字n不必受物理减速器数量的限制。只有一些等待才能获得下一个减少时段。在您的分区代码中,您可以实现将密钥分配给特定分区所需的逻辑。
但是,我没有看到超出物理上可用的减速器插槽数量而实现任何效率,因为它只会导致等待下一个减少插槽。
答案 1 :(得分:0)
Hadoop不适合这种控制。
由this优秀书籍第43-44页解释。程序员几乎无法控制:
BUT
您可以通过实施设计巧妙的自定义Partitioner
来更改数字4,该自定义{J}按您希望的方式拆分数据,以便按预期将数据分配到Reducer。在第3.3章中查看他们如何实现自定义分区器来计算相对频率。