hadoop - 自定义分区器以平衡 reducer 的输入

标签 hadoop mapreduce reducers partitioner

假设我的映射器输出 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/

相关文章:

java - 关于hadoop mrjob无法mkdir

javascript - React-redux 检查触发了哪个操作

hadoop - 在hadoop reducer中检索全局参数返回null

javascript - 调度 Action 触发,但 redux 存储不更新

hadoop - Hive 模拟不与自定义身份验证器提供程序一起使用

java - Oozie 不断将旧版本的 httpcore jar 添加到类路径

linux - 使用 SFTP 从服务器拉取文件

hadoop - 为什么我接下来不能处理我的hadoop程序?

java - 使用 Python 读取 AVRO 文件

hadoop - OOZIE:PIG 作业执行失败