解释Hadoop分区程序

时间:2015-09-10 20:04:47

标签: hadoop bigdata hadoop-partitioning

在从权威指南处理二级排序问题时,我遇到了这样的代码:

 @Override
public int getPartition(TextpairWritable tp, IntWritable value, int numPartitions) {

    return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;   
}

我想了解line的含义是什么:

return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;

如果我没有告诉驱动程序代码中的reducer数量,hadoop如何知道上面一行中该参数的值。将它与127相乘的意义是什么?

1 个答案:

答案 0 :(得分:0)

  

返回Math.abs(Integer.parseInt(tp.getyear()。toString())* 127)%numPartitions;

您可以根据key's year属性值将其视为散列。您可以选择任意(素数)乘以您获得的值。此处所选值为127。最后一部分numPartitions定义了需要划分数据的桶数(减少器数)。

  

如果我没有告诉驱动程序代码中的reducer数量,hadoop如何知道上面一行中该参数的值。

参数的默认值为1。因此,所有数据(映射器的输出)都会转到相同的reducer任务。

  

将它乘以127会有什么意义?

这是一个素数。我们通常乘以素数,以便您可以处理/忽略数据的显示。素数不能被任何其他数字整除,因此它们有助于在范围内均匀分布数据。