1.首先我们知道inputformat接口有两个方法
(旧版api 放置在 org.apache.hadoop.mapred
新版 api放置在 org.apache.hadoop.mapreduce)
第一个getSplits是获取分块的方法
第二个createRdcordReader是获取RecordReader
查看第一个方法 :
2.查看其子类FileInputformat的实现
决定splitsize的方法
splitsize 为 Math.max(minSize,Math.min(maxSize,blockSize))
3.splitSize计算过程
1)blockSize即为block块的size hadoop1.x的HDFS默认块大小为64MB;hadoop2.x的默认块大小为128MB
2)minsize
其中第一个参数:
另一个参数 :
从配置中读取该参数 mapreduce.input.fileinputformat.split.minsize 。默认为零
所以一般默认情况下 。minsize 是1
3)maxsize
而maxsize 是获取这个值 mapreduce.input.fileinputformat.split.maxsize
这个在配置文件中我没有找到。如果没有设置的话是 long MAX_VALUE
所以至此默认情况下 :minsize < blocksize< maxsize
即: splitsize 应该等于blocksize
4.计算方法
所以以文件200 m,blocksize 64m为例
根据2(源码中的计算方式 )
200/64 = 3 + 8m
m>64 * 0.1
200m文件应该分为 4个split