Hive小文件合并

当Hive查询导致大量小文件生成时,这会消耗集群资源并增加NameNode压力。Hive通过ConditionalTask检查是否需要合并小文件,并可能启动额外的map-only或mapred job。关键参数包括mapred.max.split.size、mapred.min.split.size.per.node和mapred.min.split.size.per.rack,它们影响split大小,从而控制Map Task的数量。开启merge job通常有利于性能,尤其是在作业链的最后一步。然而,针对RCFile的BlockMerger有时会产生重复文件,这需要进一步调查。若Hive未执行合并,可使用file crush工具进行手动合并,该工具支持textfile和sequencefile格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

Hive query将运算好的数据写回hdfs(比如insertinto语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对namenode造成很大压力。所以Hive在正常job执行完之后,会起一个conditionaltask,来判断是否需要合并小文件,如果满足要求就会另外启动一个map-only job 或者mapred job来完成合并

 

参数解释

hive.mergejob.maponly (默认为true)
如果Hadoop版本支持CombineFileInputFormat,则启动Map-only job formerge,否则启动  MapReduce merge job,map端combine file是比较高效的做法

hive.merge.mapfiles(默认为true)
正常的map-only job后,是否启动merge job来合并map端输出的结果

hive.merge.mapredfiles(默认为false)
正常的map-reduce job后,是否启动merge j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值