在自定义键的情况下,如何为自定义分区程序设置numReduceTask

时间:2016-04-15 08:16:22

标签: java hadoop mapreduce

HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();

@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
    // TODO Auto-generated method stub
    try {       
        String[] type=valClass.toString().split(",");

        if(type[0].equals("Mapper1")) {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
        } else {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;   
        }
    }
}

我在Partitioner类中使用上面的代码来获取我的自定义类的键。一切正常但我想要的是具有文本&#34; Mapper1&#34;发送到第一个减速机,另一个发送到第二个。我怎样才能做到这一点?我已将job.numOfReduceTaks设为2.请帮忙!

1 个答案:

答案 0 :(得分:2)

这是一个静态决定权吗? 试试这个:

if (type[0].equals("Mapper1")) {
    return 0;
} else {
    return 1;
}

是的,在驱动程序中,您需要将job.numOfReduceTaks设置为2.您做得对。