首页 > 其他分享 >Hive企业级调优[7]——HQL语法优化之小文件合并

Hive企业级调优[7]——HQL语法优化之小文件合并

时间:2024-09-22 19:48:47浏览次数:11  
标签:文件 set 输出 -- 合并 hive 企业级 调优 Hive

目录

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;

标签:文件,set,输出,--,合并,hive,企业级,调优,Hive
From: https://blog.csdn.net/qq_45115959/article/details/142442105

相关文章

  • Hive企业级调优[8]—— 其他优化
    目录 其他优化CBO优化 优化说明 优化案例 谓词下推 优化说明 优化案例 矢量化查询Fetch抓取 本地模式优化说明 优化案例并行执行 严格模式 其他优化CBO优化 优化说明CBO(CostBasedOptimizer),即基于成本的优化。在Hive中,成本模型考虑到了数据的......
  • 全面指南:使用JMeter进行性能压测与性能优化(中间件压测、数据库压测、分布式集群压测、
    目录一、性能测试的指标1、并发量2、响应时间3、错误率4、吞吐量5、资源使用率二、压测全流程三、其他注意点1、并发和吞吐量的关系2、并发和线程的关系四、调优及分布式集群压测(待仔细学习)1.线程数量超过单机承载能力时的解决方案2.如何搭建分布式集群3.实施......
  • Linux系统性能调优技巧
    Linux系统性能调优是一个复杂而细致的过程,它涉及到硬件、软件、内核参数以及进程管理等多个方面。通过合理的调优措施和持续的监控调整,可以显著提升Linux系统的运行效率和稳定性。本文将详细介绍Linux系统性能调优的技巧,涵盖硬件、软件、内核参数、进程管理等多个角度。一、硬......
  • 利用sqoop将某一数据库从MySQL导入hive
    首先,为防止报错,将两个驱动包装在sqoop中:commons-lang-2.6.jar和hive-common-3.1.2.jar一般hive中都会有这两个驱动包,因此可执行如下命令:cp/opt/installs/hive/lib/commons-lang-2.6.jar/opt/installs/sqoop/lib/cp/opt/installs/hive/lib/hive-common-3.1.2.jar/opt/ins......
  • HiveServer2 文件描述符泄漏
     现象用户反馈hs2打开的文件描述符的数量一直在涨,但是当前hs2的连接只有个位数。 排查过程首先找到hs2进程持有了哪些文件描述符,通过lsof命令lsof-p$pid,看到hs2进程确实在/data/emr/hive/tmp/operation_logs/目录下打开了大量描述符在jira中找到一......
  • GBase 8c NUMA绑核调优实操
    NUMA优化技术是针对数据库在NUMA架构CPU上运行时出现的资源消耗不均、并发场景下远端Node时延较高等问题进行优化的技术。GBase8c数据库通过设置执行线程与Node节点的亲和度,可以将线程绑定在指定的CPU核心运行,从而避免跨Node调度,降低远端访问时延,提升数据库对外处理性能。同时,线程......
  • Oracle执行计划及性能调优详解使用
    在Oracle数据库中,SQL性能分析是一项非常重要的任务。通过性能分析,我们可以了解SQL语句的执行情况,从而优化其性能。常用的方法包括使用EXPLAINPLAN、自动工作负载库(AWR)、SQLTrace等工具。EXPLAINPLAN是最常用的工具之一,它生成SQL语句的执行计划并提供重要的......
  • ⭐️Linux系统性能调优技巧
    Linux系统性能调优技巧Linux系统性能调优技巧引言1.监控系统性能1.1`top`命令1.2`htop`命令1.3`vmstat`命令1.4`iostat`命令1.5`sar`命令2.优化磁盘性能2.1磁盘分区2.2磁盘阵列2.3固态硬盘(SSD)2.4磁盘调度算法3.优化内存性能3.1内存管理3.2内存分配......
  • Hive sql 4:中位数
    先说下中位数的概念:中位数‌是统计学中的一个重要概念,它代表将一组数据按照大小排序后位于中间位置的数值。如果一组数据有奇数个数值,则中位数是中间那个数;如果数据中有偶数个数值,则中位数是中间两个数的平均值。中位数是一种位置平均数,它是按顺序排列的一组数据中居于中间位......
  • Hive sql 6:行转列及列转行
    1) 多行转单列user_idlogin_date10012024-09-0110012024-09-0210022024-09-0310032024-09-05比较常见的selectuser_id,concat_ws(',',collect_list(login_date))login_date_setfromtblgroupbyuser_id延伸下,集合中保证日期的有序启动多个mr,顺序会有问题1) 以前......