一、MapTask的并行度
运行map部分的任务叫做maptask,并行度是指同时运行的maptask的任务个数。maptask处理的数据量对应于一个文件切片,每个maptask处理一个文件切片大小的数据。
MapReducer任务运行时通过 FileInputFormat 类传入输入数据文件,该类在读取文件时会调用 getSplit() 方法对文件进行逻辑切片。
getSplit() 部分源码如下,当使用默认配置时切片大小默认等于HDFS分块大小128M
/**
* Generate the list of files and make them into FileSplits.
* @param job the job context
* @throws IOException
*/
public List<InputSplit> getSplits(JobContext job) throws IOException {
long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job)); // 1
long maxSize = getMaxSplitSize(job); // LONG_MAX_VALUE
// 块的切分标准,Hadoop2.x 默认128M
long blockSize = file.getBlockSize();
// 计算切片大小
long splitSize = computeSplitSize(blockSize, minSize, maxSize);
}
// 返回三个值得中间值
protected long computeSplitSize(long blockSize, long minSize, long maxSize) {
return Math.ma