1

假设我的映射器输出 N 个键(这些键是不同的),并且我有 K 个减速器。如何编写自定义 Paritioner 以便每个 reducer 接收大约 N/K 个密钥?哪个键去哪个接收并不重要。

示例:假设我的映射器输出 10 对<k1,v1>,<k2,v2>,<k3,v3>,...<k10,v10>,并且我有 3 个减速器。我想要 3 对到第 1 个减速器,3 对到第 2 个,4 对到第 3 个,不管哪个键去哪个减速器。

我尝试了什么:

  • 随机分配reducer。例如,随机分配<k1,v1>给第一个减速器,<k2,v2>第二个减速器,依此类推。但是仍然有reducers比其他人获得更多的数据
  • 我不想修复哪个键去哪个减速器。因为k1,k2,...k10我的映射器的键会根据输入数据而变化——>我必须为每个输入数据更改代码。此外,这些键具有相同的作用。我只需要在减速器之间平均分配它们。

非常感谢。

4

1 回答 1

0

默认分区器使用散列函数,它通过设计提供均匀分布,因此除非您对数据有所了解,否则不会得到更好的结果,例如应该分布的键的确切值。

于 2018-06-23T12:26:13.317 回答