您的位置:首页 > 新闻 > 会展 > 建筑公司资质甲级乙级_大型网站建设_福州网站关键词推广_网络整合营销4i原则

建筑公司资质甲级乙级_大型网站建设_福州网站关键词推广_网络整合营销4i原则

2025/5/12 5:02:17 来源:https://blog.csdn.net/qq_45115959/article/details/142442105  浏览:    关键词:建筑公司资质甲级乙级_大型网站建设_福州网站关键词推广_网络整合营销4i原则
建筑公司资质甲级乙级_大型网站建设_福州网站关键词推广_网络整合营销4i原则

目录

HQL语法优化之小文件合并

 优化说明

 Map端输入文件合并

Reduce端输出文件合并

优化案例


HQL语法优化之小文件合并

 优化说明

小文件合并优化主要分为两个方面:Map端输入的小文件合并以及Reduce端输出的小文件合并。

 Map端输入文件合并

合并Map端输入的小文件意味着将多个小文件划归到同一个切片中,以便由单一的Map Task来处理。这可以防止为每个独立的小文件启动一个Map Task,从而节约计算资源。

相关参数:

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;

优化案例

1)示例用表

假设存在一个需求,即计算各个省份的订单总额,下面是创建用于存储结果的数据表的Hive SQL语句:

hive (default)> drop table if exists order_amount_by_province;
hive (default)> create table order_amount_by_province(>     province_id string comment '省份id',>     order_amount decimal(16,2) comment '订单金额'> )> location '/order_amount_by_province';

2)示例SQL语句

接下来,使用如下SQL语句来填充结果表:

hive (default)> 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。可以看到,这些输出文件都是较小的文件。

4)优化思路

为了避免生成小文件,可以采用以下两种策略:

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

     

    如果将上述计算任务的并行度设置为1,那么就可以确保其输出结果仅包含一个文件。

  2. 启用Hive合并小文件优化

     

    设置以下参数:

    -- 开启合并map reduce任务输出的小文件
    set hive.merge.mapredfiles=true;-- 合并后的文件大小
    set hive.merge.size.per.task=256000000;-- 触发小文件合并任务的阈值,若某计算任务输出的文件平均大小低于该值,则触发合并
    set hive.merge.smallfiles.avgsize=16000000;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com