MapReduce剥洋葱 (3)

对于HDFS中存储的一个文件,要进行Map处理前,需要将它切分成多个块,才能分配给不同的MapTask去执行。 分片的数量等于启动的MapTask的数量。默认情况下,分片的大小就是HDFS的blockSize。

Map阶段的对数据文件的切片,使用如下判断逻辑:

  protected long computeSplitSize(long blockSize, long minSize,                                   long maxSize) {     return Math.max(minSize, Math.min(maxSize, blockSize));   }

blockSize:默认大小是128M(

minSize:默认是1byte(mapreduce.input.fileinputformat.split.minsize):

 

maxSize:默认值是Long.MaxValue(mapreduce.input.fileinputformat.split.minsize)

由此可以看出两个可以自定义的值(minSize和maxSize)与blockSize之间的关系如下:

当blockSize位于minSize和maxSize 之间时,认blockSize:

 

当maxSize小于blockSize时,认maxSize:

 

当minSize大于blockSize时,认minSize:

 

 

另外一个极端的情况,maxSize小于minSize时,认minsize,可以理解为minSize的优先级比maxSize大:

 

实际使用中,建议不要去修改maxSize,通过调整minSize(使他大于blockSize)就可以设定分片(Split)的大小了。

总之通过minSize和maxSize的来设置切片大小,使之在blockSize的上下自由调整。

什么时候需要调整分片的大小

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydsjp.html