- split和block的区别:
很多人可能认为在hadoop中的split和block是一样的,可能是因为hadoop在默认情况下split的大小和hdfs文件分块大小是一样而被误导吧。
下面来谈谈他们的区别和联系:
1.split是mapreduce中的概念,而block是hdfs中切块的大小。
2.split的大小时默认和hdfs的block块大小一致,但是可以通过配置文件自己设置:
其中有俩个配置文件(如下):
--minsize 默认大小为1
mapreduce.input.fileinputformat.split.minsize
--maxsize 默认大小为Long.MAXValue
mapreduce.input.fileinputformat.split.maxsize
在mapreduce的FileInputFormat类中有个getSplits() 方法对文件进行split,算法如下:
Math.max(minSize, Math.min(maxSize, blockSize));
1.如果blockSize小于maxSize && blockSize 大于 minSize之间,那么split就是blockSize;
2.如果blockSize小于maxSize && blockSize 小于 minSize之间,那么split就是minSize;
3.如果blockSize大于maxSize && blockSize 大于 minSize之间,那么split就是maxSize;
maptask和reducetask个数设定:
- 列表内容
1.在hadoop中一个split对应一个maptask,需要改变maptask的个数就需要改变上面所描述的配置。
2.而reducetask的个数可以又自己设定
job.setNumReduceTasks(10);