//1.3 指定分区类
job.setPartitionerClass(KpiPartitioner.class);
job.setNumReduceTasks(3);
static class KpiPartitioner extends HashPartitioner<Text, KpiWritable>{
@Override
public int getPartition(Text key, KpiWritable value, int numReduceTasks) {
if(key.toString().length()==11){
return 0;
}else if(key.toString().length()==10){
return 1;
}else{
return 2;
}
}
}
分区的例子必须打成jar运行
job.setJarByClass(KpiApp.class);
2.多个reduce任务在运行,提高整体job的运行效率
1.
Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类。
2. HashPartitioner是mapreduce的默认partitioner。计算方法是
which reducer=(key.hashCode() &Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。