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