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

news/2024/9/23 13:29:25 标签: hive, hadoop, 数据仓库

目录

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;

http://www.niftyadmin.cn/n/5672007.html

相关文章

深入探究HTTP网络协议栈:互联网通信的基石

在我们日常使用互联网的过程中,HTTP(HyperText Transfer Protocol,超文本传输协议)扮演着至关重要的角色。无论是浏览网页、下载文件,还是进行在线购物,HTTP协议都在背后默默地支持着这些操作。今天&#x…

JS执行机制(同步和异步)

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。 异步:在做这件事的同时,你还可以去处理其他事 他们的本质区别:这条流水线上各个流程的执行顺序不同。 同步任务 同步任务都在主线程上执行,形成一个执行栈。 异步…

战神5/战神:诸神黄昏/God of War Ragnarok(容量175GB)百度网盘下载

版本介绍 v1.0.612.4312|容量175GB|官方简体中文|支持键盘.鼠标.手柄|赠单板学习补丁 配置要求 战神5/战神:诸神黄昏/God of War Ragnarok 游戏介绍 不灭的北欧传奇 由Santa Monica Studio出品、Jetpack Interactive负责PC移植的佳作《God of War Ragnark》将带您…

『功能项目』QFrameWork拾取道具UGUI【69】

本章项目成果展示 我们打开上一篇68QFrameWork扔到地上UGUI的项目, 本章要做的事情是实现当物品在地上时,点击物品将对应物品转移到道具栏中 制作一个提示UI界面 添加Button组件设置为点击即将父物体隐藏 拖拽到文件夹中在场景中删除 创建脚本&#xf…

CentOS:稳定的服务器操作系统选择

在当今的IT环境中,选择合适的操作系统对于服务器的稳定性和安全性至关重要。CentOS(Community ENTerprise Operating System)作为一个基于Red Hat Enterprise Linux(RHEL)的开源操作系统,因其稳定性和安全性…

Stable Diffusion4.9一键安装教程SD(AI绘画软件)

**无套路!**文末提供下载方式 Stable Diffusion 是一款革命性的 AI 绘画生成工具,它通过潜在空间扩散模型,将图像生成过程转化为一个逐步去噪的“扩散”过程。 与传统的高维图像空间操作不同,Stable Diffusion 首先将图像压缩到…

Lua中..和...的使用区别

一. .. 的用法 二. ... 的用法 在 Lua 中,... 是一个特殊符号,它用于表示不定数量的参数。当你在函数定义或调用中使用 ... 时,它可以匹配任意数量的参数,并将它们作为列表传递。在您的代码示例中&am…

关于蓝桥杯嵌入式的部分代码规范及解决问题的算法

写在正文之前 在书写代码的时候需要注意代码的规范,不规范的代码运行起来容易出现更多的问题。 同时,在解决一些问题的时候,需要设计一套完整的算法才能完美地解决问题。 不论是代码的规范还是解决问题的算法,都不是一蹴而就的…