跳到主要内容

任务并行度 ⭐️⭐️

MapTask 并行度机制

MapTask的并行度指的是map阶段有多少个并行的task共同处理任务。map阶段的任务处理并行度,势必影响到整个job的处理速度。那么,MapTask并行实例是否越多越好呢?其并行度又是如何决定呢?

原理机制

Map阶段的并行度由逻辑切片的数量决定。逻辑切片是对输入数据进行划分的最小单元,每个逻辑切片由一个Map任务处理。

优化参数

参考FilelnputFormat类分片原理

ReduceTask 并行度机制

Reduce阶段的并行度(即Reduce任务的数量,默认值是1)同样影响整个作业的执行并发度和执行效率。与Map阶段的并发数由切片数决定不同,Reduce任务数量可以手动设置。

设置方式(driver的main函数中):

job.setNumReduceTasks(4);
// 或者
conf.set("mapreduce.job.reduces", "4");

注意:设置过多的Reduce任务可能会导致过多的小文件输出,增加了存储和管理的复杂性。而且像那种全局汇总计算的就只能有一个reduce。

核心思考点:reduce task的并行度等于redece task的数量?

理想条件下,reduce task的数量确实代表了reduce阶段的最大并行度,但在实际情况中如果资源不足以支持所有reduce tasks同时运行,则实际并行度会小于设置的reduce task数量