Hadoop map任务个数由输入文件在HDFS上的分块个数确定。
如果一个输入文件的大小大于BlockSize,那么这个输入文件被分成的若干个块,一个块即是一个split,map任务的个数等于块(split)的个数。
如果一个输入文件的大小小于BlockSize,则这个文件就是一个块(其占用的存储空间等于文件的实际大小),这个输入文件将被作为一个map任务的输入。
对于要处理大量小文件的MapReduce程序,由于一个小文件就需要启动一个Map task,太多的Map task会造成程序运行效率的低下,可以采用CombineFileInputFormat将多个input path合并成一个InputSplit送给mapper处理,从而减少Map任务的个数。
map个数的计算公式如下:
splitsize=max(minimumsize,min(maximumsize,blocksize))。