Hadoop the Definitive Guide, page 203 “最大拆分大小默认为 Java long 类型可以表示的最大值。只有当它小于块大小时,它才会起作用,迫使拆分小于块。拆分大小由以下公式计算:
max(minimumSize, min(maximumSize, blockSize))
默认情况下
minimumSize < blockSize < maximumSize
所以拆分大小是blockSize
例如
Minimum Split Size 1
Maximum Split Size 32mb
Block Size 64mb
Split Size 32mb
Hadoop 处理少量大文件比处理大量小文件更好。其中一个原因是FileInputFormat以这样的方式生成拆分,即每个拆分都是单个文件的全部或部分。如果文件非常小(“小”意味着比HDFS块小得多),并且有很多,那么每个映射任务将处理非常少的输入,并且会有很多输入(每个文件一个),每个都会产生额外的簿记开销。比较一个1gb的文件,分为16个64mb块,10.000个左右的100kb文件。10.000 个文件每个使用一个映射,作业时间可能比具有单个输入文件和 16 个映射任务的等效文件慢数十或数百倍。