多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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这个分区类,来实现我们自己的分区