reducetask的并行度
作者:互联网
reducetask的并行度
//指定reducetask的个数
job.setNumReduceTasks(4); 参数决定的 默认值是1
当有多个reducetask的时候,每一个reducetask的数据如何分配的,由分区算法决定
1、默认的分区算法
mapkey.hash % numReduceTask的个数;
只需要设置reduecetask的个数,分区数===reducetask的个数
分区编号和reducetask的个数是一一对应的
2、默认分区无法满足需求,自定义分区
1)继承Partitioner类
2)重写getPartition()方法
3)在job中指定分区类
//指定分区类
job.setPartitionerClass(myPartition.class);
4)//指定reducetask的个数
job.setNumReduceTasks(4);分区编号手动返回 0、1、2、3
分区编号返回 0、2、3、4 reducetask的个数:
1)1个 可行,所有的分区到一个reducetask中了
2)4个 reducetask0 -reducetask3
partition0------------------>reducetask0
partition2------------------>reducetask2
partition3------------------>reducetask3
partition4------------------>reducetask4
报错:Caused by: java.io.IOException: Illegal partition for 18320173382 (4)非法分区错误
2 3 不可行3)5个
partition0------------------>reducetask0 part-r-00000
reducetask1 part-r-00001
partition2------------------>reducetask2 part-r-00002
partition3------------------>reducetask3 part-r-00003
partition4------------------>reducetask4 part-r-00004
结果显示:
总结:
jsperlee 发布了31 篇原创文章 · 获赞 0 · 访问量 822 私信 关注分区编号和reducetask的编号一一对应,最终输出的结果文件是由reducetask的个数决定的,如果reducetask没有对应的分区,输出结果为0kb,这个reducetask是空跑的,消耗资源,这种情况尽量避免
分区编号最后是从0开始,顺序范湖,
标签:分区,reducetask,个数,并行度,job,part,编号 来源: https://blog.csdn.net/qq_27347421/article/details/104130180