Hadoop
的切片计算是通过调用InputFormat
接口的getSplits
方法完成的

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
网友评论