山西网站开发建设,h5网站建设服务,长春建设集团网站,wordpress写入html1 优化说明 小文件优化可以从两个方面解决#xff0c;在Map端输入的小文件合并#xff0c;在Reduce端输出的小文件合并。
1.1 Map端输入文件合并 合并Map端输入的小文件是指将多个小文件分到同一个切片中#xff0c;由一个Map Task处理#xff0c;防止单个小文件启动一个M…1 优化说明 小文件优化可以从两个方面解决在Map端输入的小文件合并在Reduce端输出的小文件合并。
1.1 Map端输入文件合并 合并Map端输入的小文件是指将多个小文件分到同一个切片中由一个Map Task处理防止单个小文件启动一个Map Task造成资源浪费。 相关参数
--将多个小文件切片合成一个切片由一个map task处理
set hive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat;1.2 Reduce输出文件合并 合并Reduce端输出的小文件是指将多个小文件合并成大文件减少HDFS小文件数量。 原理 根据计算任务输出文件的平均大小判断若符合条件则单独启动一个额外的任务进行合并。 相关参数
--开启合并map only任务输出的小文件针对只有map的计算任务
set hive.merge.mapfilestrue;--开启合并map reduce任务输出的小文件
set hive.merge.mapredfilestrue;--合并后的文件大小
set hive.merge.size.per.task256000000;--触发小文件合并任务的阈值若某计算任务输出的文件平均大小低于该值则触发合并
set hive.merge.smallfiles.avgsize16000000;2 案例
1、示例SQL语句
--计算各省份订单金额总和下表为结果表
drop table if exists order_amount_by_province;
create table order_amount_by_province(provonce_id string comment 省份idorder_amount decimal(16,2) comment 订单金额
)
location /order_amount_by_province;insert overwrite table order_amount_by_province
selectprovince_id,sum(total_amount)
from order_detail
group by province_id;2、优化前 根据任务并行度在默认情况下该sql语句的Reduce端并行度为5所以最终输出的文件个数也为5且均为小文件。
3、优化思路 方案一、合理设置任务的Reduce端并行度 将任务并行度设置为1保证输出结果为1个文件。
set mapreduce.job.reduces1;方案二、启用HIve合并小文件进行优化 设置参数
--开启合并map reduce任务输出的小文件
set hive.merge.mapredfilestrue;--合并后的文件大小
set hive.merge.size.per.task256000000;--触发小文件合并任务的阈值若某计算任务输出的文件平均大小低于该值则触发合并
set hive.merge.smallfiles.avgsize16000000;