hive 小文件的合并 hive.merge.mapredfiles

原由:node

最近仓库里面新建了一张分区表,数据量大约是12亿行,分区比较多,从2008年7月开始 一天一个分区。apache

配置了一个任务oop

对这个表进行group by 的时候 发现启动了2800多个maps .spa

执行的时间也高大10分钟。orm

而后我在hdfs文件里面看到 这个表的每一个分区里面都有20多个小文件,每一个文件都不大 300KB--1MBhadoop

 

以前的hive的参数:
hive.merge.mapfiles=true
hive.merge.mapredfiles=false
hive.merge.rcfile.block.level=true
hive.merge.size.per.task=256000000
hive.merge.smallfiles.avgsize=16000000input

hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormatit

mapred.max.split.size=256000000
mapred.min.split.size=1
mapred.min.split.size.per.node=1
mapred.min.split.size.per.rack=1io

 

hive.merge.mapredfiles 这个指的是 在Map-Reduce的任务结束时合并小文件form

解决办法:

1.修改参数hive.merge.mapredfiles=true

2.经过map_reduece的办法生成一张新的表 此时生成的文件变成了每一个分区一个文件

 

再次执行group by 发现效率获得了大大的提高。

 

小结:

正确处理hive小文件 是 控制map数的一个重要环节

处理的很差 会大大影响任务的执行效率

相关文章
相关标签/搜索