mapreduce关于大量小文件的优化策略

xiaoxiao2021-02-27  163

在分布式的架构中,分布式文件系统HDFS,和分布式运算程序编程框架mapreduce。  

HDFS:不怕大文件,怕很多小文件

mapreduce :怕数据倾斜

那么mapreduce是如果解决多个小文件的问题呢?

mapreduce关于大量小文件的优化策略

(1) 默认情况下,TextInputFormat对任务的切片机制是按照文件规划切片,不管有多少个小文件,都会是单独的切片,都会交给一个maptask,这样,如果有大量的小文件

就会产生大量的maptask,处理效率极端底下

(2)优化策略

最好的方法:在数据处理的最前端(预处理、采集),就将小文件合并成大文件,在上传到HDFS做后续的分析

补救措施:如果已经是大量的小文件在HDFS中了,可以使用另一种inputformat来做切片(CombineFileInputformat),它的切片逻辑跟FIleinputformat不同:

    它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask了

//如果不设置InputFormat,它默认的用的是TextInputFormat.class /*CombineTextInputFormat为系统自带的组件类 * setMinInputSplitSize 中的2048是表示n个小文件之和不能大于2048 * setMaxInputSplitSize 中的4096是 当满足setMinInputSplitSize中的2048情况下 在满足n+1个小文件之和不能大于4096 */ job.setInputFormatClass(CombineTextInputFormat.class); CombineTextInputFormat.setMinInputSplitSize(job, 2048); CombineTextInputFormat.setMaxInputSplitSize(job, 4096);

补充:当n+1大于最大值时候,大文件会被切开,放到n个文件去

转载请注明原文地址: https://www.6miu.com/read-14925.html

最新回复(0)