Mapper
Mapper的每次输入只执行一次
Reducer
只要key相同的,都会传入到values进行
Partiton分区器
默认的分区器采用的分区方式为计算hashcode的值,从而进行分区,默认的分区类HashPartitioner,该类继承了Partitioner这个分区类
该类需要实现的方法为int getPartition(),该类返回的值为一个数字,该数字用来区分分区。
所以,java中,如果想设置Partition,就需要实现该类,通过调用setPartitionerClass(Class cls), 就可以设置分区器
同时设置分区器的时候,仍需要设置NumReduceTasks的数量,如果有几个分区就设置为几个,
该部分的案例如:联通移动手机号分区,根据手机号码的前几个部分可以区分出手机号码是移动还是联通
job.setPartitionerClass(ContextPartitioner.class);
job.setNumReduceTasks(3);
1、 设置了分区器,还得设置reduceTask数量,否则生成的文件只有一个
2、 如果设置的reduceTask数量超过我们自定义分区器的数量,则会有些分区会没有数据
3、 如果设置的reduceTask数量少于我们自定义分区器的数量,则会抛出异常,这个异常需要特别注意,如果你的reduceTask显示的设置为1,
它不会抛出异常的,它和不设置reduceTask的是一样的,但是一旦你设置超过1的时候,则需要考虑分区与reduceTask映射关系,这种映射错误并非时常发生。
MapReducer的分区器的使用partition使用
最新推荐文章于 2022-11-28 15:25:31 发布