Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Hadoop中 key键的排序比较器类

排序是MapReduce的核心技术,尽管应用程序本身不需要对数据排序,但可以使用MapReduce的排序功能来组织数据。默认情况下,MapReduce根据输入记录的键对数据排序。键的排列顺序是由RawComparator控制的,规则如下:1)若属性mapred.output.key.comparator.class已设置,则使用该类的实例;2)否则键必须是WritableComparable的子类,并使用针对该键类的已登记的comparator;3)如果还没有已登记的comparator,则使用RawComparator将字节流反序列化为一个对象,再由WritableComparable的compareTo()方法进行操作。
      JobConf中有两个方法,setOutputKeyComparatorClass和getOutputKeyComparator。前者通过设置mapred.output.key.comparator.class属性,设置比较器类。后者在需要比较的时候,得到比较器类。
getOutputKeyComparator方法如下
  public RawComparator getOutputKeyComparator() {
    Class<? extends RawComparator> theClass = getClass("mapred.output.key.comparator.class",
     null, RawComparator.class);    if (theClass != null)
    //1,若属性mapred.output.key.comparator.class已设置,则使用该类的实例;
      return ReflectionUtils.newInstance(theClass, this);
      //如果没有设置mapred.output.key.comparator.class属性,则调用WritableComparator类的get方法
    return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class));

 public static synchronized WritableComparator get(Class<? extends WritableComparable> c) {
    WritableComparator comparator = comparators.get(c);
    if (comparator == null)
    //3,如果还没有已登记的comparator,则使用RawComparator将字节流反序列化为一个对象,再由WritableComparable的compareTo()方法进行操作。
      comparator = new WritableComparator(c, true);
   //2,否则键必须是WritableComparable的子类,并使用针对该键类的已登记的comparator;
    return comparator;
  }推荐阅读:Ubuntu 13.04上搭建Hadoop环境 http://www.linuxidc.com/Linux/2013-06/86106.htmUbuntu上搭建Hadoop环境(单机模式+伪分布模式) http://www.linuxidc.com/Linux/2013-01/77681.htmUbuntu下Hadoop环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm单机版搭建Hadoop环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm搭建Hadoop环境(在Winodws环境下用虚拟机虚拟两个Ubuntu系统进行搭建) http://www.linuxidc.com/Linux/2011-12/48894.htm更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13