Reduce个数和分区数不一致会出现的情况

首先,由于partition中的partition数量和reducer的数量是一致的,getpartition函数中的 numpartitions 也是由job设定的reducer值传入。

如果自定义了Partitioner,并设置了setNumReduceTasks,那么就会出现partition数量和reduce 个数不一致的情况

由于数据是根据分区写进reduce终产生的结果的,也就是如果reduce个数设置为2,那么假设 key.hashcode%numReduceTasks=0数据就会进入part-r-00000,key.hashcode%numReduceTasks=1数据就会进入part-r-00001,同理类推

如果partition分区数>reduce的个数,那么就会出现返回2的情况,可是没有part-r-00002这个文件,那么这部分数据就丢失了

如果partition分区数<reduce的个数,那么只会返回0或者1,就会造成数据倾斜,也就是只有partr-00000或者part-r-00001中的一个文件中有数据。

总结:不一致,会发生数据丢失或者数据倾斜。

点击此处
隐藏目录