CombineTextInputFormat切片机制优化大量小文件
- 默认情况下,TextInputformat对任务的切片机制是按文件规划切片,不管文件多小,都会有一个单独的切片,都会交给一个maptask,如果存在大量小文件,就会产生非常多的maptask,这样处理效率机会低下。
- 如何优化:
- 最好的办法,预处理,将小文件先合并成大文件,然后上传到HDFS后分析
- 补救措施:如果大量小文件已经存在HDFS中,可以使用CombineTextInputFormat,切片逻辑和TextFileInputFormat不同,可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask
- 优先满足最小切片大小,不超过最大切片大小
例如:
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m
CombineTextInputFormat.setMinInputSplitSize(job, 2097152);// 2m
添加代码实现
待处理小文件文件
默认WordCount切片数
默认切片为4
添加代码实现后:
修改后切片数为1