hadoop在默认的情况下,split和hdfs的block的大小是一样的,这样容易造成误解认为两者是一样的,下面说下两者的区别和联系:
-
split是MapReduce里的概念,是切片的概念,split是逻辑切片 ;而block是hdfs中切块的大小,block是物理切块;
-
split的大小在默认的情况下和HDFS的block切块大小一致,为了是MapReduce处理的时候减少由于split和block之间大小不一致,可能会完成多余的网络之间的传输。
可以通过配置文件进行设置:
–minsize 默认大小为1mapreduce.input.fileinputformat.split.minsize
–maxsize 默认大小为Long.MAXValue mapreduce.input.fileinputformat.split.maxsize
在mapreduce的FileInputFormat类中有个getSplits() 方法对文件进行split,算法如下:
Math.max(minSize,Math.min(maxSize, blockSize));其中maxSize是取得longValueMax的值
1.如果blockSize小于maxSize && blockSize 大于 minSize之间,那么split就是blockSize;
2.如果blockSize小于maxSize && blockSize 小于 minSize之间,那么split就是minSize;
3.如果blockSize大于maxSize && blockSize 大于 minSize之间,那么split就是maxSize;