long splitSize = computeSplitSize(blockSize, minSize, maxSize);
protected long computeSplitSize(long blockSize, long minSize, long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
blockSize
: 块大小
minSize
: minSize从mapreduce.input.fileinputformat.split.minsize
和1之间对比,取最大值
maxSize
: 读取mapreduce.input.fileinputformat.split.maxsize
,如果没有设置,则使用Long.MaxValue
作为默认值
默认的片大小就是文件的块大小 文件的块大小默认为128M,默认每片就是128M!
mapreduce.input.fileinputformat.split.minsize
> 128Mmapreduce.input.fileinputformat.split.maxsize
< 128M理论上来说:如果文件的数据量是一定的话,
片(InputSplit)
:
块(Block)
:
在向HDFS写文件时,文件中的内容以块为单位存储!块是实际的物理存在!
建议: 片大小最好等于块大小!
因为将片大小设置和块大小一致,可以最大限度减少因为切片带来的磁盘IO和网络IO