mr自定义排序和分类

1、上文的补充jvm

  一、setup方法通常是用来初始化和加载资源的,主要也是由于编写mr程序所使用jvm和跑mr所使用的jvm并非同一个,它们之间数据也不能共享,因此须要在setup里进行load。排序

  二、上文提到了能够自定义类型,当你须要使用这个自定义类型来作key时,你能够指定一个Comparator,固然也能够是自定义的Comparator。继承

  例如:资源

  public class MyKey implements WritableComparable<MyKey> {源码

    ...it

    static {
      WritableComparator.define(MyKey.class, new MyComparator());
    }table

  }class

  三、在shuffle阶段是如何进行分组的?默认分组是经过key的值来进行比较的,也就是equals方法,当咱们自定义key的时候,并须要按照key中某个属性来进行分组时,就须要实现自定义分组,并经过setGroupingComparatorClass来进行设置。遍历

  四、protected void reduce(MyKey key,Iterable<MyValue> values,Context context),其中MyKey由key1和key2组成,分组时按照key1进行分组。在分组完成后进入reduce方法后,是由key来找寻value,仍是由value来寻找key呢,我猜想是后者(没看源码不能保证)。因此咱们在遍历values时,每一个value可能对应不一样的key。程序

2、自定义排序和分组

  自定义排序和分组都是继承WritableComparator,并重写compare方法,只不过设置时一个是在自定义key时来进行注册(WritableComparator.define),一个是run里来设置(setGroupingComparatorClass)

相关文章
相关标签/搜索