并行度
一个任务同时由人执行的数量
reduce和map的并行度没有任何数量关系
reduce端的并行度
reducetask默认值是1,可以通过 job.setNumReduceTasks(n) 设置
n就是reduce的并行度,每个节点都可以执行0-n个reduceTask
注意:
-
reducetask=0,表示没有reduce阶段,输出文件个数和map个数一致。
-
reducetask默认值就是1,所以输出文件个数为一个。
-
如果数据分布不均匀,就有可能在reduce阶段产生数据倾斜
-
reducetask数量并不是任意设置,还要考虑业务逻辑需求,有些情况下,需要计算全局汇总结果,就只能有1个reducetask。
-
具体多少个reducetask,需要根据集群性能而定。
-
如果分区数不是1,但是reducetask为1,是否执行分区过程。答案是:不执行分区过程。因为在maptask的源码中,执行分区的前提是先判断reduceNum个数是否大于1。不大于1肯定不执行。
根据实验数据得出结论
reduceTask的数量与DataNode的数量保持一致的时候,可以达到最快的计算速度。前提条件以逻辑需求为主。
map端的并行度
看原数据可以分为多少个切片(InputSplit)。
-
一个job的map阶段并行度由客户端在提交job时决定。
-
而客户端对map阶段并行度