分区的概念
在MapReduce中,数据进行map转换后,默认根据map后数据的key值进行散列派发,同一个分区的数据发送到同一个Reduce中去处理。但实际中,这种方式不是高效的,并且有时并不能满足我们的需求。所以我们需要自定义分区方式,根据自己的需求,选择记录的reducer。进行自定义分区时,我们需要继承Partitioner类,重写get方法,实现自定义分区。
分区的实现
首先。我们来看看Partitioner类。Partitioner类需要传入两个参数,分别是进行map操作后的key值和value值。在get方法中传入三个参数map操作后的key值、value值及reduceTask的个数。在自定义分区时,若不设置默认是1个。
可以仿照Patitioner类的实现类HashPartitioner编写自己的分区类。