出于负载平衡的原因,我想在 Hadoop 环境中创建比 reducer 更多的分区。有没有办法将分区分配给特定的减速器,如果是这样,我在哪里可以定义它们。我写了一个单独的分区器,现在想用特定的分区来处理一个特定的减速器。
预先感谢您的帮助!
出于负载平衡的原因,我想在 Hadoop 环境中创建比 reducer 更多的分区。有没有办法将分区分配给特定的减速器,如果是这样,我在哪里可以定义它们。我写了一个单独的分区器,现在想用特定的分区来处理一个特定的减速器。
预先感谢您的帮助!
分份是为减速机完成的。创建的分区数量与选择的 reducer 数量一样多。您可以通过以下方式选择减速器的数量
job.setNumReduceTasks(n);
数字 n 不必受您拥有的物理减速器数量的限制。只需要等待下一个reduce slot。在您的分区程序代码中,您可以实现将键分配给特定分区所需的逻辑。
但是,我认为超出物理上可用的 reducer 插槽的数量并不会提高效率,因为它只会导致等待下一个 reducer 插槽。
Hadoop 不适合这种控制。
正如这本优秀书籍的第 43-44 页所解释的那样。程序员几乎无法控制:
但
您可以通过实施一个巧妙设计的自定义来更改第 4 点,该自定义Partitioner
以您想要的方式拆分您的数据,以便它按预期在减速器之间分配您的负载。在第 3.3 章中查看他们如何实现自定义分区器来计算相对频率。