Hive优化--小文件合并

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

Map端输入文件合并

合并Map端输入的小文件,是指将多个小文件划分到一个切片中,进而由一个Map Task去处理。

目的是防止为单个小文件启动一个Map Task,浪费计算资源

--可将多个小文件切片,合并为一个切片,进而由一个map任务处理
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 

Reduce输出文件合并

合并Reduce端输出的小文件,是指将多个小文件合并成大文件

目的是减少HDFS小文件数量

原理是根据计算任务输出文件的平均大小进行判断

若符合条件,则单独启动一个额外的任务进行合并

--开启合并map only任务输出的小文件
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;

例子

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

hive (default)>
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';

你可能感兴趣的:(hive,大数据,hadoop)