🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 分区 默认分区是根据key的hashCode对reduceTasks个数取模得到的.用户没法控制那个key存储到那个分区 自定义分区需要 1. 自己写个类继承抽象类Partitioner,这个类就是定义分区规则的 2. 在job驱动中,设置自定义partitioner 3. 设置reduce个数 # 写法 Mapreduce中会将map输出的k-v对,按照相同key分组,然后分发给不同的reducetask 默认的分发规则为:根据key的`hashcode%reducetask`数来分发 所以:如果要按照我们自己的需求进行分组,则需要改写数据分发(分组)组件Partitioner **数据倾斜问题: 单纯某个key的数据量大,可在key之后增加随机数,把相应的key打散** 自定义一个CustomPartitioner继承抽象类:Partitioner 然后在job对象中,设置自定义`partitioner: job.setPartitionerClass(CustomPartitioner.class)` 我们需要继承Partitioner这个分区类,来实现我们自己的分区