Hadoop的切片计算是通过调用InputFormat接口的getSplits方法完成的
InputFormat
TextInputFormat切片规则
TextFileInputFormat继承至FileInputFormat,它没有重写FileInputFormat的getSpilt方法,所以,计算切片大小是使用父类FileInputFormat的getSpilt方法。FileInputFormat是一个文件一个文件处理的,每个文件至少切一片,FileInputFormat计算切片大小的相关代码如下:
long splitSize = computeSplitSize(goalSize, minSize, blockSize);
protected long computeSplitSize(long blockSize, long minSize,
long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
可以看出切片大小splitSize是取minSize,blockSize,maxSize三者的中间值,默认情况下
minSize=1,blockSize=128M,maxSize=Long.MAX_VALUE
所以,默认情况,splitSize=blockSize=128M,其中:
- minsize 通过
mapreduce.input.fileinputformat.split.minsize参数控制 - maxsize 通过
mapreduce.input.fileinputformat.split.maxsize参数控制
CombineFileInputFormat切片规则
CombineFileInputFormat 切片会合并小文件,可以避免不必要的maptask











网友评论