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()

  

 

posted @ 2020-03-22 17:29  拔丝小红薯  阅读(1001)  评论(0编辑  收藏  举报