MapReduce中大量小文件是如何产生的?如何优化?

在分布式的架构中,分布式文件系统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个文件去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值