目录
Hadoop版本: 3.1.3
通过分析MapReduce比较器获取的源码可知,对Key排序的比较器都是WritableComparator。下面就来一探WritableComparator的源码,看它是如何实现的。(comparator的获取可以参考:Hadoop源码分析:Comparator的获取。)
一、WritableComparator部分源码分析
WritableComparator是Comparator的一个实现类,该类定义了一个HashMap集合comparators,通过define()方法把Class c 类的比较器以<c.class,comparator>键值对的方式存入到comparators。换句话说,就是把C类的comparator存放在comparators中,这样在有需要的时候可以根据对应的Class c,获得与之对应的比较器。
public class WritableComparator implements RawComparator, Configurable {
private static final ConcurrentHashMap<Class, WritableComparator> comparators =
new ConcurrentHashMap();
public static void define(Class c, WritableComparator comparator) {
comparators.put(c, comparator);
}
同时,该类提供了获得比较器的get方法,如下源码。该方法内部调用了Hashmap的get()方法,通过key的值,获得与传入参数key对应的比