Hive小文件的解决方案

第一种:从数据产生的途径上进行解决。
1)尽量用sequencefile (SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。),减少使用textfile (文本文件),从一定程度上能减少小文件的产生。
2)可以减少reduce的个数,
3)少用动态表,多用distribute by 分区

第二种:对于已经存在的小文件进行解决方案。

1)可以用hadoop achieve 归档命令,对文件进行归档。
2)重建表,重建表的时候来设置减少reduce的数量。
3)设置map/reduce 的参数

设置map输入合并小文件的相关参数:

每个map最大输入大小(这个值决定 了合并后文件的数量)
set mapred.max.split.size = 256000000;
一个节点上的split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
set mapred.min.split.size.per.node = 100000000;
一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)
set mapred.min.split.size.per.rack = 100000000;
执行Map前进行小文件合并
set hive.input.format = org.apache.hadoop.hive.ql.io.CombinHiveInput;

设置map输出和reduce输出进行合并的相关参数:

设置map端输出进行合并,默认为true
set hive.merge.mapfiles = true;
设置reduce端输出进行合并,默认为false
set hive.merge.mapredfiles = true;
设置合并文件的大小
set hive.merge.size.per.task = 256*1000*1000;
当输出文件的平均数小于该值师,启动一个独立的Mapreduce任务进行文件merge.
set hive.merge.smailfiles.avgsize = 16000000;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值