setPartitionerClass是用来设置按照什么规则对key来进行分区,即决定map输出时,什么样的key输出到同一个reduce节点上;但是这个设置不能保证到同一个reduce节点的key会在同一个group里(即不一定在reduce的同一个iter迭代里)。用户可以自定义分区类,通过继承Partitioner类,实现getPartition方法,该方法参数分别是key,value,reduce task数量(可由setNumReduceTasks指定)
setGroupingComparatorClass是用来设置按照什么规则对key来进行分组,即保证符合该规则的key会在同一个group里(即reduce的同一个iter迭代里)。用户可以自定义分组类,通过继承WritableComparator类,实现compare方法,该方法参数分别是key1,key2,通过自定义比较算法来实现分组,即一个group中的所有元素的key都是compare==0的。