自定义分区程序以平衡输入到减速器

时间:2018-06-22 03:07:56

标签: hadoop mapreduce reducers partitioner

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

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

我尝试过的事情:

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

默认分区程序使用哈希函数,它可以按设计分配均匀的数据,因此除非您对数据有所了解,否则您将无法获得更好的结果。应该分配的键的确切值。