irpas技术客

Hive 自动合并小文件的功能详解_houzhizhen_hive合并小文件

irpas 5540

小文件的判断

如果一个 job 结束后,生成的文件的平均大小 小于 参数 hive.merge.smallfiles.avgsize 设定的值,则认为是小文件。如以下设置平均小文件的大小为 128M。

set hive.merge.smallfiles.avgsize=128000000; 合并后的目标文件大小

希望的合并后的目标文件大小,如果此值小于 hive.merge.smallfiles.avgsize, 则此值为 hive.merge.smallfiles.avgsize。

set hive.merge.size.per.task=128000000; 合并Tez 作业产生的文件

此参数仅仅对 Tez 作业有作用。如果 Tez 作业的最终输出文件的平均大小小于 hive.merge.smallfiles.avgsize,则启用一个新的作业。

set hive.merge.tezfiles=true; 合并 MapOnly 的作业产生的文件 set hive.merge.mapfiles=true;

此参数设置为 true 的时候,仅合并 mapreduce 作业的 map only 作业。如以下 SQL 有 3 个 mapper,没有 reducer。每个 mapper 仅仅输出 十分之一的数据。结果输出了 3 个小文件。如果 hive.merge.mapfiles=true,会再启动一个作业来合并文件。

set hive.execution.engine=mr; insert overwrite table t2 select * from t1 where hash(c1) % 10 = 1; 合并 MapReduce 作业产生的文件 set hive.merge.mapredfiles=true;

此参数设置为 true 的时候,仅合并 有 reduce 任务的 mapreduce 作业。如以下 SQL 有 3 个 mapper,有 4 个 reducer。每个 mapper 仅仅输出 十分之一的数据。结果 reduce 任务输出了 4个小文件。如果 hive.merge.mapredfiles=true,会再启动一个作业来合并文件。

set hive.execution.engine=mr; insert overwrite table t2 select c1 from t1 where hash(c1) % 10 =1 group by c1 ; 综述

Hive 自动合并小文件可以减轻 NameNode 的压力。数据量大可以有更好的压缩效率。并且后续处理这些数据时,任务的启动速度会加快。 但是配置稍微复杂,没有一个能用所有引擎的参数。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive合并小文件 #小文件的判断如果一个 #Job #结束后生成的文件的平均大小小于