其他分享
首页 > 其他分享> > reducetask的并行度

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
结果显示:
在这里插入图片描述

总结:

分区编号和reducetask的编号一一对应,最终输出的结果文件是由reducetask的个数决定的,如果reducetask没有对应的分区,输出结果为0kb,这个reducetask是空跑的,消耗资源,这种情况尽量避免
分区编号最后是从0开始,顺序范湖,

jsperlee 发布了31 篇原创文章 · 获赞 0 · 访问量 822 私信 关注

标签:分区,reducetask,个数,并行度,job,part,编号
来源: https://blog.csdn.net/qq_27347421/article/details/104130180