默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片的,不管文件大小,都会有一个单独的切片,都会交给一个maptask,此时如果有很多小文件就会产生大量的maptask,导致处理效率低下
优化1
最好的办法,在数据处理系统的最前端(预处理/采集)就将小文件合并成大大文件再上传到HDFS做后续分析
优化2(补救方案),如果在hdfs上已经存在大量小文件,可以使用CombinFileInputFormat来做切片,它的且切片和Fileinputformat不同,可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask执行