栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive 自动合并小文件

Hive 自动合并小文件

小文件的判断

如果一个 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 的压力。数据量大可以有更好的压缩效率。并且后续处理这些数据时,任务的启动速度会加快。
但是配置稍微复杂,没有一个能用所有引擎的参数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/700671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号