0

出于负载平衡的原因,我想在 Hadoop 环境中创建比 reducer 更多的分区。有没有办法将分区分配给特定的减速器,如果是这样,我在哪里可以定义它们。我写了一个单独的分区器,现在想用特定的分区来处理一个特定的减速器。

预先感谢您的帮助!

4

2 回答 2

0

分份是为减速机完成的。创建的分区数量与选择的 reducer 数量一样多。您可以通过以下方式选择减速器的数量

job.setNumReduceTasks(n);

数字 n 不必受您拥有的物理减速器数量的限制。只需要等待下一个reduce slot。在您的分区程序代码中,您可以实现将键分配给特定分区所需的逻辑。

但是,我认为超出物理上可用的 reducer 插槽的数量并不会提高效率,因为它只会导致等待下一个 reducer 插槽。

于 2013-04-26T09:25:10.947 回答
0

Hadoop 不适合这种控制。

正如这本优秀书籍的第 43-44 页所解释的那样。程序员几乎无法控制:

  1. mapper 或 reducer 在哪里运行(即,在集群中的哪个节点上)。
  2. 当 mapper 或 reducer 开始或结束时。
  3. 哪些输入键值对由特定映射器处理。
  4. 哪些中间键值对由特定的 reducer 处理。(你想要什么)

您可以通过实施一个巧妙设计的自定义来更改第 4 点,该自定义Partitioner以您想要的方式拆分您的数据,以便它按预期在减速器之间分配您的负载。在第 3.3 章中查看他们如何实现自定义分区器来计算相对频率。

于 2013-04-26T11:45:47.277 回答