当前位置: 首页 > news >正文

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

目录

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;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PostgreSQL 的 logger 进程和 Oracle 的 diag 进程对比
  • FreeSWITCH 简单图形化界面29 - 使用mod_xml_curl 动态获取配置、用户、网关数据
  • WebLogic系列漏洞
  • 深度学习与应用:行人跟踪
  • mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
  • 垂直越权漏洞及解决方案
  • 看看ZOH纤维:高透明、稳定性好,在生物信息监测中的出色表现
  • UniApp如何打包成客户端应用程序
  • [Linux]Vi和Vim编辑器
  • 电脑远程启动Wol
  • 【Linux篇】网络编程基础(笔记)
  • 【VLM小白指北 (1) 】An Introduction to Vision-Language Modeling
  • ER论文阅读-Decoupled Multimodal Distilling for Emotion Recognition
  • CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • @angular/forms 源码解析之双向绑定
  • 【Linux系统编程】快速查找errno错误码信息
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular2开发踩坑系列-生产环境编译
  • Git初体验
  • Go 语言编译器的 //go: 详解
  • idea + plantuml 画流程图
  • Java知识点总结(JavaIO-打印流)
  • Linux Process Manage
  • Mysql数据库的条件查询语句
  • Phpstorm怎样批量删除空行?
  • PV统计优化设计
  • WePY 在小程序性能调优上做出的探究
  • 阿里云前端周刊 - 第 26 期
  • 深度学习中的信息论知识详解
  • 小程序button引导用户授权
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $jQuery 重写Alert样式方法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022 CVPR) Unbiased Teacher v2
  • (day 12)JavaScript学习笔记(数组3)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (windows2012共享文件夹和防火墙设置
  • (二)hibernate配置管理
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十五)使用Nexus创建Maven私服
  • . NET自动找可写目录
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Core 中间件与过滤器
  • .NET 材料检测系统崩溃分析
  • .NET 发展历程
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net连接MySQL的方法