解释hadoop分区器

7lrncoxx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(258)

在处理《权威指南》中的第二个排序问题时,我遇到了如下代码:

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

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

我想了解线条的含义:

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

如果我不告诉驱动程序代码中缩减器的数量,那么hadoop如何知道上面一行中这个参数的值呢。把它乘以127有什么意义?

vwhgwdsa

vwhgwdsa1#

return math.abs(integer.parseint(tp.getyear().tostring())*127)%numpartitions;
你可以把它看作是散列,基于你的 key's year 属性值。你可以选择任何(素数)与你得到的值相乘。这里选择的值是 127 . 最后一部分, numPartitions 定义需要将数据划分为多少个存储桶(减速器)。
如果我不告诉驱动程序代码中缩减器的数量,那么hadoop如何知道上面一行中这个参数的值呢。
参数的默认值为 1 . 所以所有的数据(Map器的输出)都被放到同一个reducer任务中。
把它乘以127有什么意义?
它是一个素数。我们通常用素数相乘,这样你就可以处理/忽略数据的显示。素数不能被任何其他数整除,因此它们有助于在整个范围内均匀分布数据。

相关问题