假设我的映射器输出 N 个键(这些键是不同的),并且我有 K 个缩减器。如何编写自定义 Paritioner,以便每个 reducer 接收大约 N/K 个 key ?哪个 key 接收到哪个并不重要。
示例:假设我的映射器输出 10 对 <k1,v1>,<k2,v2>,<k3,v3>,...<k10,v10>
,我有 3 个 reducer 。我想要 3 对进入第一个 Reducer,3 对进入第 2 个,4 对进入第 3 个,无论哪个键进入哪个 reducer 。
我的尝试:
- 随机分配reducer。例如,随机分配
<k1,v1>
到第一个 reducer ,<k2,v2>
到第二个 reducer ,依此类推。但是仍然有 reducer 比其他 reducer 获得更多的数据 - 我不想修改哪些键对应哪些 reducer。因为键
k1,k2,...k10
我的映射器根据输入数据发生变化 --> 我必须为每个输入数据更改代码。此外,这些键具有相同的作用。我只需要在 reducer 之间平均分配它们。
非常感谢。
最佳答案
默认分区器使用散列函数,它通过设计提供均匀分布,因此除非您对数据有所了解,否则您不会得到更好的结果,例如应分发的 key 的确切值。
关于hadoop - 自定义分区器以平衡 reducer 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50980096/