Hive之任务优化

【大数据Hive】hive 优化策略之job任务优化 hive job优化策略 阅读详情

Hive 是一个基于 Hadoop 的数据仓库工具,提供了 SQL-like 的查询语言来分析存储在 HDFS(Hadoop Distributed File System)上的大规模数据集。为了提高查询性能,Hive 提供了多种优化方法,涵盖不同层次的改进,从 SQL 查询层到执行层。

Hive介绍请参考 数据仓库之Hive-优快云博客

1. 分区优化

Hive 表可以按列进行分区,使得数据根据分区列存储。查询时,可以通过分区列直接读取特定分区数据,避免扫描整个表,提高查询效率。

  • 静态分区:在表创建时,预定义固定的分区列。
  • 动态分区:根据查询中的列动态生成分区,在数据导入或插入时进行分区操作。
优化建议:
  • 减少分区数量:分区太多会导致小文件过多,影响性能。可以通过合并分区来减少这种情况。
  • 避免在分区列上进行复杂计算:查询时应尽量直接使用分区列条件,而不要在分区列上进行复杂计算,如函数或表达式计算。

2. Bucketing(分桶)

Bucketing 是将表的数据进一步划分为多个桶(bucket)。每个桶内的数据按照某个哈希函数分布,从而在 Join 和 Group By 操作时可以减少数据扫描和排序的开销。

  • 适用于 Join 优化:分桶表上的 Join 操作可以将数据划分为更小的子集进行操作,提高 Join 的性能。
  • 适用于 Group By 优化:桶内数据在写入时已经部分排序,因此在进行 Group By 时可以减少排序和数据重分配的开销。
优化建议:
  • 使用分桶的前提是数据规模较大,且 Join 或 Group By 操作较频繁。
  • 确保 set hive.enforce.bucketing=true 在查询时生效,启用 Hive 的分桶强制执行。

3. 文件格式优化

Hive 支持多种存储文件格式,不同的文件格式对性能有不同的影响。

  • ORC(Optimized Row Columnar):高效的列式存储格式,支持压缩、跳过无关数据等功能,适合读操作多的场景。
  • Parquet:也是一种列式存储格式,类似 ORC,适用于大规模数据分析和查询场景。
  • Avro:适合存储和序列化具有动态架构的数据,但在性能方面不如 ORC 和 Parquet。
优化建议:
  • 对于读操作较多的场景,推荐使用 ORC 或 Parquet 格式。
  • 通过 set hive.exec.compress.output=true 和 set hive.exec.orc.default.compress=SNAPPY 来启用 ORC 文件的压缩。

4. MapReduce 任务优化

Hive 默认依赖 MapReduce 来执行查询任务。通过优化 MapReduce 任务的数量和数据处理逻辑,可以显著提高查询性能。

  • MapJoin 优化:在 Join 操作时,如果某个表较小,可以将其加载到内存中进行 MapJoin,而不再通过 Shuffle 操作进行 Join。MapJoin 可以大幅减少 Shuffle 阶段的数据量和 I/O 开销。

    启用 MapJoin 优化的参数:

    set hive.auto.convert.join=true;
    set hive.mapjoin.smalltable.filesize=25000000;
    
  • 本地模式执行:对于较小的数据集,可以通过本地模式来执行 MapReduce,避免资源调度的开销。

    启用本地模式的参数:

    set hive.exec.mode.local.auto=true;
    set hive.exec.mode.local.auto.inputbytes.max=50000000;
    set hive.exec.mode.local.auto.tasks.max=4;
    

5. CBO(成本优化器,Cost-Based Optimizer)

CBO 是 Hive 的一种基于成本的查询优化器,它会根据查询的实际执行代价选择最优的执行计划。

  • CBO 依赖统计信息来评估表大小、列值分布等,因此需要提前收集表的统计信息。
  • CBO 可以优化 Join 操作顺序、选择适当的 Join 算法(如 Broadcast Join、Sort-Merge Join 等)。
优化建议:
  • 启用 CBO 优化的参数:

    set hive.cbo.enable=true;
    set hive.compute.query.using.stats=true;
    set hive.stats.fetch.column.stats=true;
    set hive.stats.fetch.partition.stats=true;
    
  • 使用 ANALYZE TABLE 命令收集表和分区的统计信息:

    ANALYZE TABLE table_name COMPUTE STATISTICS;
    ANALYZE TABLE table_name PARTITION (partition_name) COMPUTE STATISTICS;
    

6. 并行执行(Parallel Execution)

Hive 支持并行执行多个 MapReduce 任务,可以利用集群的多核资源提高查询执行速度。

  • 并行执行可以并发启动多个不同的 Stage,避免串行执行带来的等待时间。
优化建议:
  • 启用并行执行的参数:
    set hive.exec.parallel=true;
    set hive.exec.parallel.thread.number=16;
    

7. 内存管理和堆大小

Hive 任务的执行受限于内存的使用情况,尤其是在数据 Shuffle 和 Join 阶段。

  • 设置合适的堆大小:确保 MapReduce 任务有足够的内存来执行复杂查询,可以通过设置 JVM 堆大小参数来调优。
优化建议:
  • 使用合适的内存参数设置:
    set mapreduce.map.memory.mb=4096;
    set mapreduce.reduce.memory.mb=8192;
    set mapreduce.map.java.opts=-Xmx3072m;
    set mapreduce.reduce.java.opts=-Xmx6144m;
    

8. 数据倾斜(Data Skew)处理

在 Join 或 Group By 操作时,某些键的值可能会占据较大的数据比例,导致某些任务的负载远高于其他任务,产生数据倾斜问题。

  • Skew Join 优化:对于数据倾斜的 Join 操作,Hive 提供了 Skew Join 优化,能够将数据倾斜的键单独处理,避免任务过载。
优化建议:
  • 启用 Skew Join 的参数:
    set hive.optimize.skewjoin=true;
    

9. SQL Query 优化

编写高效的 SQL 查询可以显著提高 Hive 查询性能。

  • *避免使用 SELECT : 查询时尽量只选择需要的列,减少不必要的数据传输。
  • 合理使用索引:在适当的列上创建索引可以加速查询。
  • 避免笛卡尔积:确保 Join 操作有合适的连接条件,避免产生笛卡尔积。

10. 其他优化技术

  • Tez 引擎:Tez 是 MapReduce 的增强替代方案,可以通过 DAG(有向无环图)来减少 I/O 操作,提高查询性能。
  • LLAP(Long-Lived Process):LLAP 是一种查询加速机制,可以减少查询的延迟并提高并发性,适用于频繁查询的场景。

通过应用上述优化方法,Hive 查询的执行性能可以得到显著提升。

数仓工具—Hive进阶之优化map任务数量(9) 控制 map 任务数量 为什么要控制 map 数量 我们先来了解下什么情况要设置 map 数量。一般来讲,map 数量默认,不需要我们设置,一般情况下,Hive 自己就可以知道到底使用多少个map。 但是,当我们明确知道表的数据量不大,而 Hive 运行启动了几千个 map 的时候,就有必要减小 map 的数量了。好比 1000 个西瓜没必要安排 100 辆车去拉,安排 2 辆车就可以搞定了。 另一方面,当我们发现 map 数量不多,但 map 运行速度极慢的时候。这时可以看一下数据,看看实际需求是不是很大 阅读详情

相关推荐

Hive性能优化复习总结.doc.pdf

Hive性能优化复习总结.doc.pdf

hive优化方式和使用技巧

部分内容出处: http://www.atatech.org/article/detail/5617/0 http://www.atatech.org/article/detail/4392/515  一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数。      DESCRIBE FUNCTION; (2)A

wisgood的专栏 2万+

Windows 11安装realtek audio control

Windows 11安装realtek audio control,解决无法链接RPC问题

m0_46144825的博客 8万+

Hive优化的十大方法

hive 优化

thy822的专栏 1万+

戴尔PowerEdge服务器R450 RAID配置步骤

戴尔PowerEdge服务器R450 RAID配置步骤

且听风呤tmj的博客 6910

Silly Tavern(酒馆)AI 角色扮演下载与安装教程(Windows本地部署)

SillyTavern是一款开源AI角色扮演前端工具,支持沉浸式对话和长期角色互动。本文详细介绍了在Windows系统F盘部署SillyTavern的完整流程,包括下载项目、安装Node.js和Git环境、配置路径、启动服务等关键步骤,并特别说明非系统盘路径可能遇到的npm安装问题及解决方法。成功启动后,用户可通过浏览器访问本地地址使用该工具进行AI角色扮演互动。

Tan3851的博客 1万+

3万字史诗级 Hive 性能调优(建议收藏)

前言 Hive 作为大数据领域常用的数据仓库组件,在平时设计和查询的时候要特别注意效率 。影响 Hive 效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce 分配不合理等等。 对Hive 的调优既包含 Hive 的建表设计方面,对 HiveHQL 语句本身的优化,也包含 Hive 配置参数 和 底层引擎 MapRedu...

weixin_45727359的博客 1028

Vast.ai GPU服务器租用与SSH密钥连接实战指南

本文详细介绍了如何在Vast.ai平台租用GPU服务器并通过SSH密钥安全连接的全流程。从注册、选配GPU型号到SSH密钥生成与配置,再到实战中的端口转发和文件传输技巧,帮助用户高效利用云端GPU资源进行深度学习等计算密集型任务。

weixin_29574585的博客 524

Hive优化(21种方案)

1、Fetch抓取   Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台。   在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本...

小道的博客 6071

Chrome更新出现错误代码3: 0X80070422 -- system level的解决方案

本文主要介绍了Chrome更新出现错误代码3: 0X80070422 – system level的解决方案,希望能对使用Chrome的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

Multisim14使用教程详尽版--(2025最新版)

摘要:本文详细介绍了Multisim14电路仿真软件的功能和使用方法。主要内容包括:1)主流电路仿真软件比较,突出Multisim在教学、竞赛设计中的优势;2)软件界面说明,涵盖菜单栏、工具栏、元器件库和仪器仪表;3)18类元器件分类详解及其使用操作;4)15种仪器仪表的原理和应用场景;5)电路原理图设计与仿真流程;6)基本电路分析方法(直流静态工作点分析、交流分析等)。文章还提供了硬件工程师笔试面试相关资源链接,涵盖电阻、电容、三极管等器件知识及AD软件操作指南。通过系统讲解,帮助用户掌握Multisim

XU157303764的博客 2万+

Hive 任务优化 tips

Hive 任务优化 tips 1. 集群任务队列: 一般有 root.default, root.online, root.offline, root.spark-thiftserver Hue提交的任务一般默认在 default队列 如果是紧急任务,可...

a45691316的博客 158

分享6款文字语音生成驱动虚拟数字人说话的开源项目

对定性和定量结果的大量实验表明,我们的算法实现了高质量的照片真实感对话头部视频,包括根据语音节奏进行的各种面部表情和头部运动,并超过了最先进的水平。我们的系统包含三个阶段。当然,FACEGOOD Audio2face 部分也可根据自己的喜好进行重新训练,比如你想用自己的声音或其它类型的声音,或者不同于 FACEGOOD 使用的模型绑定作为驱动数据,都可以根据下面提到的流程完成自己专属的动画驱动算法模型训练。兼顾生成的韵律和外表的相似,除了面部,考虑到了头部的动作,虑了背景区域的artifact。

南七小僧的学海无涯 3048

Hive任务优化--控制hive任务中的map数和reduce数

一、    控制hive任务中的map数: 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务。 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2.    举例: a)    假设input目录下有1个文

michael_zhu_2004的专栏 1万+

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 49

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Hive任务优化】—— Map、Reduce数量调整

文章目录一、如何调整任务map数量1、FileInputFormat的实现逻辑介绍1.1 getSplits方法实现2、CombineFileInputFormat的实现逻辑介绍2.1 getSplits方法实现3、HiveInputFormat 的实现逻辑介绍4、CombineHiveInputFormat的实现逻辑介绍5、map数量调整总结二、如何调整任务reduce数量三、关于map tas...

u013332124的专栏 8436

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hive优化之——控制hive任务中的map数和reduce数

一、 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务。 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2. 举例: a) 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数 ...

w201615060094的博客 455

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

hive任务优化

hive是基于大数据开发的一组用于数据仓库的api,其主要功能是将HQL(HIVE SQL)转换成mapreduce执行。所以对hive的优化几乎等于对mapreduce的优化,主要在io和数据倾斜方面进行优化。本文主要在一下几个方面进行介绍合并小文件压缩文件join倾斜group by倾斜合并小文件map针对每一个文件产生一个或多个map任务,如果输入小文件过多,则会产生许多map任务处理每个小...

u012485099的博客 1235

hive优化之控制hive任务中的map数

一、    控制hive任务中的map数:  1.    通常情况下,作业会通过input的目录产生一个或者多个map任务。  主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2.    举例:  a)    假设input目录下有

bingyu0046的专栏 454

hive优化之 —— 控制hive任务中的map数和reduce数

一、    控制hive任务中的map数:  1.    通常情况下,作业会通过input的目录产生一个或者多个map任务。  主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2.    举例:  a)    假设input目录下有

wisgood的专栏 1567

hive参数配置及任务优化

一、hive常用参数 0.常用参数 --@Name: --@Description: --@Type:全量加载 --@Author:--- --@CreateDate: --@Target: --@SourceTable: --@ModifyBy: --@ModifyDate: --@ModifyDesc: --@Copyright --设置作业名 set ma...

weixin_30945039的博客 423

Hive与MR任务优化参数

1.当你的查询数据量较大,此时spark等其他计算引擎会因为自身复杂的执行计划导致计算量很大,再加上计算中的硬性资源消耗,导致需要的资源使你无法接受,此时如果你可以接受较长时间的运行等待,建议使用hive,因为hive底层用的mr,任务分割截止到一次mr,没有那面大的消耗需求,你可以通俗的理解为hive只需要有你数据量大小和跑数据需要的进程类开销既可,它没有spark那种复杂的执行计划,因此它的使用成本是目前大数据计算引擎中最低的一个,单效率也是最慢的,不过对于大任务的处理,更稳定。

别人笑我太疯癫,我笑他人看不穿。 1610

spark hive 任务优化浅谈

spark hive 任务优化浅谈数据倾斜数据倾斜的表现问题查找问题解决拆数据合数据预计算其他零零散散的任务优化技巧 在日常的etl开发的过程中,不管是使用spark,或者是hive来做开发,经常会遇见任务跑的特别慢,或者任务出现oom,或者数据量并不大,但是任务就是跑的特别慢等等情况。 关于任务的优化,我将自己工作中用到的一些小的trick分享出来。 数据倾斜 数据倾斜是什么?数据倾斜是在计算数...

王谦的专栏 589

hive优化之 控制hive任务中的map数和reduce数

一、    控制hive任务中的map数:  1.    通常情况下,作业会通过input的目录产生一个或者多个map任务。  主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 2.    举例:  a)    假设input目录下有

lhy66的专栏 572
上一篇: 版本控制之Git
下一篇: 图数据库之TigerGraph
james二次元
博客等级 码龄16年 8102粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值