hadoop Sort排序

 1 public int getPartition(IntWritable key,IntWritable value,int numPartitions){
 2             int Maxnumber = 12345;
 3             int bound = Maxnumber/numPartitions +1;
 4             int keynumber = key.get();
 5             
 6             System.out.println("numPartition:"+numPartitions);
 7             for(int i = 0;i<numPartitions;i++){
 8                 if(keynumber<bound *i && keynumber >= bound*(i-1))
 9                     return (i-1);
10                 }
11         return 0;
12             }
13         
14     }
//if you don't configure the parameter, and it's not configured in mapred-site.xml (mapred.reduce.tasks) then the default is 1.
numPartitions的值 在mapred-site.xml中定义,默认是1。

MapReduce过程中就有排序,它是按照key值进行排序,如果key为封装int的IntWritable类型,那么MapReduce按照数字大小对key排序,如果key为封装String的Text类型,那么MapReduce按照字典顺序对字符串进行排序。 Reduce自动排序的数据仅仅是发送到自己所在节点的数据,使用默认的排序并不能保证全局的顺序,因为在排序前还有一个partition的过程,默认无法保证分割后的各个Reduce上的数据整体上是有序的,所以要使用默认的排序,还必须定义自己的Partition类。保证执行Partition过程之后所有Reduce上的数据在整体上是有有序的,然后再对局部Reduce上的数据进行默认排序,这样才能保证整体有序。

原文地址:https://www.cnblogs.com/happinessqi/p/3404733.html