MapReduce Shuffle机制及其Partition分区

一、Shuffle机制

MapReduce Shuffle机制及其Partition分区_第1张图片

Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。
MapReduce Shuffle机制及其Partition分区_第2张图片

二、Partition分区

1、问题引出

要求将统计结果按照条件输出到不同文件中(分区)。比如:将统计结果按照手机归属地不同省份输出到不同文件中(分区)

2、默认Partitioner分区

MapReduce Shuffle机制及其Partition分区_第3张图片

默认分区是根据keyhashCodeReduce Tasks个数取模得到的。用户没法控制哪个key存储到哪个分区。

3、自定义Partitioner步骤

(1) 自定义类继承Partitioner, 重写getPartition()方法
MapReduce Shuffle机制及其Partition分区_第4张图片
(2) 在Job驱动中,设置自定义Paritioner

job.setPartitionerClass(CustomPartitioner.class);

(3)自定义Partition后, 要根据自定义Partitioner的逻辑设置相应数量的ReduceTask

job.setNumReduceTasks(5);

4、分区总结

(1) 如果Reduce Task的数量 > getPartition的结果数,则会多产生几个空的输出文件part-r-000xx;

(2) 如果1 < ReduceTask的数量 < getPartition的结果数, 则有一部分分区数据无处安放, 会Exception;

(3) 如果ReduceTask的数量 = 1, 则不管MapTask端输出多少个分区文件,最终结果都交给这一个Reduce Task,最终也就只会产生一个结果文件 par-00000;

(4) 分区号必须从零开始,逐一累加。

你可能感兴趣的:(大数据,大数据,java,hadoop,mapreduce)