package demo04.flow; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Partitioner; /** * 分区继承于这个类,重写getPartition方法返回数字根据数字分到各个reduce,此处传入的是K2,V2 */ public class FlowPartion extends Partitioner<Text, FlowNum> { @Override public int getPartition(Text text, FlowNum flowNum, int i) { String line = text.toString(); if (line.startsWith("135")) { return 0; }else if(line.startsWith("135")){ return 1; }else if(line.startsWith("135")){ return 2; }else if(line.startsWith("135")){ return 3; }else if(line.startsWith("135")){ return 4; }else{ return 5; } } }
主程序里run方法里加入
//分区,分区个数,分区个数最好与上面方法的分区个数相等,多了冗余,少了一个reduce处理多份工作 job.setPartitionerClass(FlowPartion.class); job.setNumReduceTasks(6);