• 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上的数据进行默认排序,这样才能保证整体有序。

  • 相关阅读:
    __doPostBack的使用
    【转】function,new,constructor and prototye
    谈谈一些网页游戏失败的原因到底有哪些?(转)
    全面剖析页游巨头发家史(转)
    2013.02.20开通博客
    老子喜欢的女人
    如何成为强大的程序员?(转)
    注重健康
    学习方法总结
    数据库知识点滴积累
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3404733.html
Copyright © 2020-2023  润新知