Partition(分区)
一:每次从环形缓存区溢写的数据都会写到一组分区的某一个里面,最后通过归约排序将所有组的分区归成一组分区。配合设置ReduceTast的个数可以实现将数据最终写出到多个文件中。
二:默认分区是根据key的hasCode对ReduceTasks个数取模得到的。用户没法控制哪个key存储到哪个分区里。
三:分区个数和Reduce Tast个数的关系:(1)ReduceTast数量>getPartition的分区数,会多产生几个空的输出文件。
(2)ReduceTast数量<getPartition的分区数,那么会有一部分分区数据无处安放,会Exception
(3)如果ReduceTast的数量是1,那么不管有多少个分区文件,都只会产生一个结果文件,所有数据都放在里面。
(4)分区号必须从零开始,逐一累加。
四:自定义分区实现
(1)创建一个类继承Partitioner。
(2)重写里面的getPartition方法,return 数字几就将当前数据写到第几个分区。
(3)在驱动类指定自定义分区 job.setPartitionClass()
(4)指定相同数量的ReduceTast job.setNumReduceTasks()