Hadoop学习日记(十二)
2019.07.03
主题:MapReduce自定义分组的实现
学习过程主要参考段海涛大数据p34
1.自定义分组机制
MapReduce进行分组是根据一个继承Partitioner类的具体实现类来定义的,一般是默认有一个HashPartitioner类。如果要自定义自己的分组机制,自然就需要自定义一个自己的继承Partitioner类的具体实现类(例如MyPartitioner类),在MyPartitioner类里定义自己想要实现的分组机制,最后在Runner类里指定分组机制为自定义分组机制。
job.setPartitioner(MyPartitioner.class);
2.自定义reducer task的任务并发数
job.setNumReduceTasks(num);
reduce的任务并发数应该和分组的数量保持一致。
如果任务并发数大于分组的数量,则多的那几个任务拿不到数据,输出为空,不会报错。
如果任务并发数小于分组的数量,会报错,错误提示为Illegal partition for xxxx。
需要注意的是如果设置为1是可以的,因为如果本身不设置任务并发数,只设置分组机制,默认是1个reduce task。
总结来说,要么是1个reduce task,要么有大于等于分组数的reduce task。