默认情况下,TextInputFormat对任务的切片机制是按文件规划切片,不管文件多小都会上一个单独的切片,都会交给一个maptask,这样如果有大量的小文件,就会产生大量的maptask,处理效率及其地下。
策略
最好的办法:在数据处理系统的最前端(预处理/采集),就将小文件合并成大文件再上传到HDFS做后续分析。
如果已经上大量小文件再HDFS中了可以使用另一种inputFormat来做切片(CombineFileInputFormat),他的切片逻辑跟FileInputFormat不同:它可以将多个小文件从逻辑上规划到一个切片中, 这样多个小文件就可以交给一个maptask。