hive企业级调优策略之小文件合并

测试所用到的数据参考:

原文链接:https://blog.csdn.net/m0_52606060/article/details/135080511

本教程的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。

优化说明

小文件合并优化,分为两个方面,分别是Map端输入的小文件合并,和Reduce端输出的小文件合并。

Map端输入文件合并

合并Map端输入的小文件,是指将多个小文件划分到一个切片中,进而由一个Map Task去处理。目的是防止为单个小文件启动一个Map Task,浪费计算资源。

相关参数为:

--可将多个小文件切片,合并为一个切片,进而由一个map任务处理

bash 复制代码
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 

Reduce输出文件合并

合并Reduce端输出的小文件,是指将多个小文件合并成大文件。目的是减少HDFS小文件数量。其原理是根据计算任务输出文件的平均大小进行判断,若符合条件,则单独启动一个额外的任务进行合并。

相关参数为:

--开启合并map only任务输出的小文件

bash 复制代码
set hive.merge.mapfiles=true;

--开启合并map reduce任务输出的小文件

bash 复制代码
set hive.merge.mapredfiles=true;

--合并后的文件大小

bash 复制代码
set hive.merge.size.per.task=256000000;

--触发小文件合并任务的阈值,若某计算任务输出的文件平均大小低于该值,则触发合并

bash 复制代码
set hive.merge.smallfiles.avgsize=16000000;

优化案例

(1)示例用表

现有一个需求,计算各省份订单金额总和,下表为结果表。

bash 复制代码
drop table if exists order_amount_by_province;
create table order_amount_by_province(
    province_id string comment '省份id',
    order_amount decimal(16,2) comment '订单金额'
)
location '/order_amount_by_province';

(2)示例SQL语句

bash 复制代码
insert overwrite table order_amount_by_province
select
    province_id,
    sum(total_amount)
from order_detail
group by province_id;

(3)优化前

根据任务并行度一节所需内容,可分析出,默认情况下,该sql语句的Reduce端并行度为5,故最终输出文件个数也为5,下图为输出文件,可以看出,5个均为小文件。

(4)优化思路

若想避免小文件的产生,可采取方案有两个。

(1)合理设置任务的Reduce端并行度

若将上述计算任务的并行度设置为1,就能保证其输出结果只有一个文件。

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

再次执行上述的insert语句,观察结果表中的文件,只剩一个了。

(2)启用Hive合并小文件优化

设置以下参数:

--开启合并map reduce任务输出的小文件

bash 复制代码
set hive.merge.mapredfiles=true;

--合并后的文件大小

bash 复制代码
set hive.merge.size.per.task=256000000;

--触发小文件合并任务的阈值,若某计算任务输出的文件平均大小低于该值,则触发合并

bash 复制代码
set hive.merge.smallfiles.avgsize=16000000;

再次执行上述的insert语句,观察结果表中的文件,只剩一个了。

相关推荐
无级程序员5 小时前
hive2服务启动报错:/tmp/hive on HDFS should be writable(不是chmod 777能解决的)
hive·hadoop·hdfs
rui锐rui7 小时前
大数据学习2:HIve
大数据·hive·学习
凌辰揽月10 小时前
Servlet学习
hive·学习·servlet
weixin_3077791321 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
王小王-1231 天前
基于Hadoop的公共自行车数据分布式存储和计算平台的设计与实现
大数据·hive·hadoop·分布式·hadoop公共自行车·共享单车大数据分析·hadoop共享单车
王小王-1231 天前
基于Hadoop的大规模文本词频统计分析系统设计与实现
hadoop·mapreduce·hadoop词频统计·hadoop文本统计·mapreduce词频统计
陈敬雷-充电了么-CEO兼CTO1 天前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
桂成林1 天前
Hive UDF 开发实战:MD5 哈希函数实现
hive·hadoop·哈希算法
isNotNullX1 天前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析
王小王-1232 天前
基于Hadoop的京东厨具商品数据分析及商品价格预测系统的设计与实现
hadoop·数据分析·京东厨具·厨具分析·商品分析