MapReducer的分区器的使用partition使用

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映射关系,这种映射错误并非时常发生。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值