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

  • 相关阅读:
    MYSQL中排序
    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)
    job1
    python中对于数组的操作
    python中将字符串转为字典类型
    python中的周几
    python 链接redis 获取对应的值
    jenkins 设置定时任务规则
    如何安全close go 的channel
    [转]
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3404733.html
Copyright © 2011-2022 走看看