【大数据之Hive】二十五、HQL语法优化之小文件合并

1 优化说明

小文件优化可以从两个方面解决,在Map端输入的小文件合并,在Reduce端输出的小文件合并。

1.1 Map端输入文件合并

合并Map端输入的小文件是指将多个小文件分到同一个切片中,由一个Map Task处理,防止单个小文件启动一个Map Task,造成资源浪费。

相关参数:

sql 复制代码
--将多个小文件切片合成一个切片,由一个map task处理
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

1.2 Reduce输出文件合并

合并Reduce端输出的小文件是指将多个小文件合并成大文件,减少HDFS小文件数量。

原理:

根据计算任务输出文件的平均大小判断,若符合条件则单独启动一个额外的任务进行合并。

相关参数:

sql 复制代码
--开启合并map only任务输出的小文件,针对只有map的计算任务
set hive.merge.mapfiles=true;

--开启合并map reduce任务输出的小文件
set hive.merge.mapredfiles=true;

--合并后的文件大小
set hive.merge.size.per.task=256000000;

--触发小文件合并任务的阈值,若某计算任务输出的文件平均大小低于该值,则触发合并
set hive.merge.smallfiles.avgsize=16000000;

2 案例

1、示例SQL语句

sql 复制代码
--计算各省份订单金额总和,下表为结果表
drop table if exists order_amount_by_province;
create table order_amount_by_province(
    provonce_id string comment '省份id',
    order_amount decimal(16,2) comment '订单金额'
)
location '/order_amount_by_province';

insert overwrite table order_amount_by_province
select
    province_id,
    sum(total_amount)
from order_detail
group by province_id;

2、优化前

根据任务并行度,在默认情况下,该sql语句的Reduce端并行度为5,所以最终输出的文件个数也为5,且均为小文件。

3、优化思路
方案一、合理设置任务的Reduce端并行度

将任务并行度设置为1,保证输出结果为1个文件。

sql 复制代码
set mapreduce.job.reduces=1;

方案二、启用HIve合并小文件进行优化

设置参数:

sql 复制代码
--开启合并map reduce任务输出的小文件
set hive.merge.mapredfiles=true;

--合并后的文件大小
set hive.merge.size.per.task=256000000;

--触发小文件合并任务的阈值,若某计算任务输出的文件平均大小低于该值,则触发合并
set hive.merge.smallfiles.avgsize=16000000;
相关推荐
老蒋新思维1 小时前
从「流量算法」到「增长算法」:AI智能体如何重构企业增长的内在逻辑
大数据·网络·人工智能·重构·创始人ip·创客匠人·知识变现
五度易链-区域产业数字化管理平台2 小时前
大数据与 AI 赋能招商全流程:五度易链平台的技术架构与实践应用解析
大数据·人工智能
Moonbeam Community2 小时前
Polkadot 2025:从协议工程到可用的去中心化云平台
大数据·web3·去中心化·区块链·polkadot
阿里云大数据AI技术3 小时前
DataWorks 又又又升级了,这次我们通过 Arrow 列存格式让数据同步速度提升10倍!
大数据·人工智能
dixiuapp4 小时前
设备维修记录系统,从数据沉淀到价值挖掘的跃迁
大数据·数据库·人工智能
Guheyunyi5 小时前
安全风险监测预警系统如何重塑企业安全防线
大数据·人工智能·科技·安全·信息可视化
云境天合小科普5 小时前
隧道洞外亮度检测仪:全天守护隧道入口安全
大数据
GIS数据转换器5 小时前
空天地一体化边坡监测及安全预警系统
大数据·人工智能·安全·机器学习·3d·无人机
玄微云5 小时前
玄微科技:大健康数智化的 4 个 AI 智能体落地要点
大数据·人工智能·科技·软件需求·门店管理
热爱专研AI的学妹5 小时前
【搭建工作流教程】使用数眼智能 API 搭建 AI 智能体工作流教程(含可视化流程图)
大数据·数据库·人工智能·python·ai·语言模型·流程图