HDFS的block是逻辑上的数据块.Hadoop2.0中每一块默认大小128MB,实际存储过程中block大小小于等128MB,它是以文件为存储对象.如一200MB大小文件,分两个数据块128MB+72MB 这里的两个块大实际小分别是128MB和72MB
算法分析:
getFormatMinSplitSize() = 1 //最小切片值,默认为1
max(minSize, min(maxSize,blockSize)) //取minSize, min()之间的最大值
long maxSize = getMaxSplitSize(job);
min(maxSize,blockSize) //取maxSize,blockSize之间的最小值
long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));
blockSize=128MB //默认blockSize为128MB
//得到block大小
long blockSize = file.getBlockSize();
所以增加切片大小有要调整 min(maxSize,blockSize)中maxSize值
减小切片大小调整minSize值.
具体两个方法如下:
FileInputFormat.setMaxInputSplitSize(job, size);
FileInputFormat.setMinInputSplitSize(job, size);
//判断是否可切割
根据CompressionCodec 判断是否为压缩文件(CompressionCodec ==null),如果不是,返回true,否则判断压缩文件是否可切割