在我的应用程序中,我想根据键创建尽可能多的reducer作业。现在我的当前实现将所有键和值写入单个(reducer)输出文件中。所以为了解决这个问题,我使用了一个分区程序,但我无法调用该类。分区程序应该在选择Map任务之后和选择reduce任务之前调用但是没有。分区程序的代码如下
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;
}
}
这段代码是否正确,根据键和值对文件进行分区,输出会自动传输到reducer?
答案 0 :(得分:0)
您没有显示所有代码,但通常有一个类(称为“作业”或“MR”类)配置映射器,减速器,分区器等,然后实际将作业提交给hadoop 。在这个类中,您将拥有一个具有许多属性的作业配置对象,其中一个属性是reducer的数量。将此属性设置为hadoop配置可以处理的任何数字。
一旦使用给定数量的reducer配置作业,该数字将被传递到您的分区(顺便说一下,这看起来是正确的)。您的分区程序将开始为键/值对返回适当的reducer /分区。这就是你如何获得尽可能多的减速器。