setPartitionerClass、setOutputKeyComparatorClass 与 setOutputValueGroupingComparator

Partitioner这个类是用来决定map输出时,什么样的key输出到同一个reduce节点(调用setPartitionerClass方法),但不保证到同一个reduce节点的key会在同一个group(即不一定在reduce的同一个iter迭代里)。注:map端当输出buffer到达内存的一定比例时,将内存中的数据写到磁盘,此时会按key进行排序,然后才写入磁盘。

由于Partitioner不保证同一个reduce节点的key会到一个group中,所以还需要Comparator来指定group的划分方法(调用setOutputValueGroupingComparator方法),一个group即一个iter迭代。

setOutputKeyComparatorClass方法很容易和setOutputValueGroupingComparator混淆,

setOutputValueGroupingComparator是用来决定group划分,一个group一个iter因此,一个group中的所有元素的key都是compare==0的。

setOutputKeyComparatorClass 设置的是key的比较器,默认是有一个的。因为需要不同的key值之间共享下values所用用这个比较器,比如,进来了 两个key 值是34 和45 如果通过group比较一样的话,那么先输入的key的34 的values和后进入的45的values合并在一起共同作为key是34的value。那KEY 45的value合并到34中了。在输出结果中,key 45 就不会被送到reduce了 而他的value被送到key 34中了。

setPartitionerClass、setOutputKeyComparatorClass 与 setOutputValueGroupingComparator_第1张图片

而setOutputKeyComparatorClass是用来决定key的排序。

默认情况下,reduce节点上的数据是按key的升序字母序来排的,如果你要改变这个顺序(比如数字序)可以用setOutputKeyComparatorClass来指定自定义的类。

你可能感兴趣的:(buffer,磁盘)