1 MapTask
1.1 MapTask的并行度指的是在MapReduce处理任务过程中的map阶段有多少个并行的task处理任务.map阶段的并行度由客户端在提交job时决定,即客户端提交job之前会对处理数据进行逻辑切片,每个逻辑切片对应启动一个MapTask.源码运行逻辑如下图
从下图可以看出一个job的map阶段并行度由客户端在提交job时切片数决定
1.2 从源码运行逻辑可以看出,逻辑切片机制由FileInputFormat实现类的getSplits()方法完成.生成切片的部分源码如下:
下图可以看出逻辑切片不考虑数据整体,而是针对每个文件进行切片
下面代码是确定切片大小的代码.可以看出默认情况下切片的大小为BlockSize,以及如果自定义修改切片大小,需要修改minSize和maxSize的值,配置参数为mapreduce.input.fileinputformat.split.minsize和mapreduce.input.fileinputformat.split.maxsize
从下面可以看出虽然一般情况下切片是按照splitSize来切,但是并不是每块切片的大小都是小于等于splitSize.因为切片的条件是按照1.1倍的splitSize进行判断的.
2. ReduceTask
2.1 ReduceTask的并行度指的是在MapReduce处理任务过程中的reduce阶段有多少个并行的task处理任务. 其并行度是由提交任务时参数配置的,默认为1.如:job.setNumReduceTasks(4),其并行度为4.