学科分类
目录
Hadoop技术栈

Partitioner组件

Partitioner组件可以让Map对Key进行分区,从而可以根据不同的key分发到不同的Reduce中去处理,其目的就是将key均匀分布在ReduceTask上。Hadoop自带了一个默认的分区类HashPartitioner,它继承了Partitioner类,并提供了一个getPartition方法,其定义如下所示。

  public abstract class Partitioner<KEY, VALUE> {

​    public abstract int getPartition(KEY key, 

​                    VALUE value, int numPartitions);

  }

​ 如果我们想自定义一个Partitioner组件,需要继承Partitioner类并重写getPartition()方法。在重写getPartition()方法中,通常的做法是使用hash函数对文件数量进行分区,即通过hash操作,获得一个非负整数的hash码,然后用当前作业的reduce节点数进行取模运算,从而实现数据均匀分布在ReduceTask的目的。

点击此处
隐藏目录