1

在我的应用程序中,我想根据键创建尽可能多的减速器作业。现在我当前的实现将所有键和值写入单个(reducer)输出文件中。所以为了解决这个问题,我使用了一个分区器,但我不能调用类。分区器应该在选择映射任务之后和选择减少任务之前调用,但它没有。分区器的代码如下

public class MultiWayJoinPartitioner extends Partitioner<Text, Text> {
@Override
public int getPartition(Text key, Text value, int nbPartitions) {
return (key.getFirst().hashCode() & Integer.MAX_VALUE) % nbPartitions;
return 0;
}
}

这段代码根据键和值对文件进行分区是否正确,并且输出将自动传输到减速器?

4

1 回答 1

0

您不会显示所有代码,但通常有一个类(称为“Job”或“MR”类)配置映射器、reducer、分区器等,然后将作业实际提交给 hadoop。在此类中,您将拥有一个具有许多属性的作业配置对象,其中之一是减速器的数量。将此属性设置为您的 hadoop 配置可以处理的任何数字。

一旦为作业配置了给定数量的 reducer,该数量将被传递到您的分区中(顺便说一下,这看起来是正确的)。您的分区器将开始为键/值对返回适当的减速器/分区。这就是你如何获得尽可能多的减速器。

于 2012-09-03T14:12:48.060 回答