Hive优化总结

hive优化总结 优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜。 理解hadoop的核心能力,是hive优化的根本。这是这一年来,项目组所有成员宝贵的经验总结。   长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜。 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几 阅读详情

1.Hive表优化

1.1 分区

分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在, 但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列)。

1.1.1静态分区

create table if not exists tablename(id int,name string,tel string)
partitioned by(dt string)
row format delimited
fields terminated by '\t'
stored as textfile;

1.1.2动态分区

使用动态分区前,需要配置以下参数:

hive.exec.dynamic.partition:在DML/DDL中是否支持动态分区,配置为true

hive.exec.dynamic.partition.mode:默认strict,在strict模式下,动态分区的使用必须在一个静态分区确认的情况下,其他分区可以是动态,可以考虑配置成nostrict。

1.2 分桶

使用分桶前,需要配置以下参数:

hive.enforce.bucketing:数据分桶是否被强制执行,默认false,如果开启,则写入table数据时会启动分桶。

hive.enforce.sorting:开启强制排序时,插数据到表中会进行强制排序,默认false;


对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

2. Hive查询优化

2.1 join优化

2.1.1 和数据倾斜有关的优化:

hive.optimize.skewjoin:是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理,默认值为false。

hive.skewjoin.key    倾斜键数目阈值,超过此值则判定为一个倾斜的 Join 查询。默认值为100000

2.1.2和mapjoin有关的优化:

hive.auto.convert.join:是否根据输入小表的大小,自动将 Reduce 端的 Common Join 转化为 Map Join,从而加快大表关联小表的 Join 速度。

hive.mapjoin.smalltable.filesize:输入表文件的mapjoin阈值,如果输入文件的大小小于该值,则试图将普通join转化为mapjoin,默认25MB;

上面的两个参数是自动启用mapjoin,也可以手动启动mapjoin。

2.1.3 和where有关的优化

由于join操作是在where操作之前执行,所以当你在执行join时,where条件并不能起到减少join数据的作用。

优化前:

select o.cid,c.id from order o 
join customer c 
on o.cid=c.id where o.dt='2013-12-12';

优化后:

select o.cid,c.id from (select cid from order where dt='2013-12-12') o
join customer c
on o.cid=c.id;

优化后会在map端通过where语句过滤掉一些数据,提高了效率

2.2 group by优化

hive.groupby.skewindata:group by操作是否允许数据倾斜,默认是false,当设置为true时,执行计划会生成两个map/reduce作业,第一个MR中会将map的结果随机分布到reduce中,达到负载均衡的目的来解决数据倾斜。

hive.groupby.mapaggr.checkinterval:map端做聚合时,group by 的key所允许的数据行数,超过该值则进行分拆,默认是100000;

2.3 count distinct优化

优化前:

select count(distinct id) from tablename;

在数据量大时,可以使用如下优化:

select count(1) from (selectdistinct id from tablename) tmp;

select count(1) from (select id from tablename group by id) tmp;

优化前查询只会启动一个job来完成,完成数据去重和计数时都只在一个reduce端(即便通过mapred.reduce.tasks设置reduce的数目为多个,但实际执行时仍然只有一个)进行,优化后会启动两个job来完成,同时可以通过mapred.reduce.tasks设定更多的reduce数目,所以适合在数据量很大的情况下使用,因为初始化一个job时花费的时间也会很长。

看一个更复杂的例子:

优化前:

select a,sum(b),count(distinct c),count(distinct d)
from test group by a;

优化后:

from (
 select a,0 as b,c,null as d from test group by a,c
 union all
 select a,0 as b,null as c,d from test group by a,d
 union all
 select a,b,null as c,null as d from test
) tmp1 group by a;

3. Hive job优化

3.1 并行化执行

每个查询被Hive转化为多个阶段,有些阶段的关联性不大,则可以并行化执行,减少执行时间。

使用并行化执行前,需要配置以下参数:

hive.exec.parallel:hive的执行job是否并行执行,默认不开启false,在很多操作如join时,子查询之间并无关联可独立运行,这种情况下开启并行运算可以大大加速;

hvie.exec.parallel.thread.number:并行运算开启时,允许多少作业同时计算,默认是8;

3.2 本地化执行

使用本地化执行前,需要配置以下参数:

hive.exec.mode.local.auto:是否由hive决定自动在local模式下运行,默认是false。

配置了上面参数后,该job还必须满足以下条件,才能真正的使用本地模式:

1. job的输入数据大小必须小于参数

hive.exec.mode.local.auto.inputbytes.max(默认128MB)

2. job的map数必须小于参数:

hive.exec.mode.local.auto.tasks.max(默认4),我使用的hive版本为1.2.1,貌似已经取消了该配置

3. job的reduce数必须为0或1。

3.3 合并小文件

1. 合并输入小文件

set mapred.max.split.size=256000000;  #每个Map最大输入大小

set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小 

set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并

2. 合并输出小文件

hive.merge.mapfiles:在只有map的作业结束时合并小文件,默认开启true;

hive.merge.mapredfiles:在一个map/reduce作业结束后合并小文件,默认不开启false;

hive.merge.size.per.task: 合并后每个文件的大小,默认256000000

3.4 JVM重利用

Hadoop中有个参数是mapred.job.reuse.jvm.num.tasks(hadoop2 为:mapreduce.job.jvm.numtasks),默认是1,表示一个JVM上最多可以顺序执行的task数目(属于同一个Job)是1。也就是说一个task启一个JVM。

适当地增大该值对于有较多task的job是分厂有意义的,但是也有个缺点就是:开启JVM重用将会一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡“的job中有几个reduce task 执行的时间要比其他reduce task消耗的时间多得多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。

3.5 压缩数据

1.中间结果压缩

中间结果压缩就是处理hive查询的多个job之间的数据,对于中间压缩,最好选择一个节省CPU耗时的压缩方式。

hive.exec.compress.intermediate:决定查询的中间 map/reduce job (中间 stage)的输出是否为压缩格式。 

hive.intermediate.compression.codec:中间 map/reduce job 的压缩编解码器的类名(一个压缩编解码器可能包含多种压缩类型),该值可能在程序中被自动设置。           

hive.intermediate.compression.type:中间 map/reduce job 的压缩类型,如 "BLOCK""RECORD"。  

我自己使用的是hive1.2.1版本,但是没有找到hive.intermediate.compression.codec和hive.intermediate.compression.type这两个配置项,如果有朋友跟我的不一样,可以跟我说下。

2.最终结果压缩

hive.exec.compress.output:决定查询中最后一个 map/reduce job 的输出是否为压缩格式。   

mapred.output.compression.codec:最后结果的压缩编解码器的类名

mapred.output.compression.type:最后结果的压缩类型


Hive SQL 优化 要想做好hive优化,首先要理解MR过程,HiveSQL转换为MR的过程,以及Hive表的分区分桶机制。 本质上的优化是,减少读,避免shuffle 和 增加并发度。 优化的手段: 跳过不必要的读 减少Shuffle 读延迟问题 数据倾斜 Partition、Bucket 使用 Skew(hive对声明了Skew的列会单独使用文件存储,并且在资源分配上有优待) MapJoin(Broadcast Join),避免ReduceJoin 增加热数据备份数 对于倾斜部分单独拿出来,做Map Joi 阅读详情

相关推荐

【大数据Hive】hive 优化策略之job任务优化

hive job优化策略

congge_study的博客 9521

hive的分区简介

网上有篇关于hive的partition的使用讲解的比较好,转载了: 一、背景 1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。 2、分区表指的是在创建表时指定的partition的分区空间。 3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned ...

zhaoguowei的博客 462

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 450

Hive总结篇及Hive的优化

概述 Hive学习也有一段时间了,今天来对Hive进行一个总结,也是对自己的总结,作者还是个小白,有不对的地方请大家指出相互学习,共同进步。今天来谈一谈什么是Hive,产生背景,优势等一系列问题。 什么是Hive 老规矩:官网地址 Hive wiki. 先来谈谈自己的理解: 有些人可能会说Hive不就是写SQL的吗,那我们其实可以从另一个角度来理解:Hive很强大,只要写SQL就能解...

4万+

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2790

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

曾用名:极客柒 1853

Hive/HiveSQL常用优化方法全面总结

Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率。影响Hive效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、job或I/O过多、MapRe...

微信搜:import_bigdata,大数据领域硬核原创作者 8579

从入门到精通:dirmap 高级 Web 目录扫描实战指南

本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。

rnn9storyteller的博客 482

Hive篇---Hive使用优化

一.前述 本节主要描述Hive的优化使用,Hive的优化着重强调一个 把Hive SQL 当做Mapreduce程序去优化二.主要优化点 1.Hive运行方式:本地模式集群模式本地模式开启本地模式:set hive.exec.mode.local.auto=true;注意:hive.exec.mode.local.auto.inputbytes.max默认值为128M表示加载文件的最大值,若大...

weixin_34092455的博客 194

SIMULINK开发项目实例 1000 例专栏之第912例--AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真

本文详细介绍了使用Simulink和Simscape Electrical搭建三相电压型PWM整流器(VSR)模型的方法。主要内容包括:系统结构设计、主电路拓扑搭建、单位功率因数控制算法实现(含PLL锁相环、dq变换、PI控制器等模块)、参数配置和仿真设置。通过仿真分析验证了该系统能实现输入电流与电压同相位、输出直流电压稳定等特性,体现了PWM整流器的高效性和低谐波优势。文章还提出了增强鲁棒性、多工况测试等优化建议,为电力电子系统设计提供了实用指导。该建模方法对新能源发电、电动汽车充电等领域具有重要意义。

xiaoheshang_123的博客 7798

STM32F103标准库开发:Keil5新建STM32工程

新建STM32工程 步骤一:创建工程模板文件 新建一个文件夹 template 在文件夹template里面新建五个文件 (1)CMSIS: 存放内核驱动程序和启动引导文件 (2)FWLIB:存放库函数文件 (3)Project:存放工程文件 (4)System:存放自己写的驱动程序 (5)User:存放用户程序(主函数) 步骤二:导入stm...

MQ0522的博客 2万+

Hive优化

1. 概述 1.1 hive的特征: 可以通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析; 它可以使已经存储的数据结构化; 可以直接访问存储在Apache HDFS或其他数据存储系统(如Apache HBase)中的文件; Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎; 它提供类似sql的查询语句HiveQL对数据进行分析处理; 数据的存储格式有多种,比如数据源是二进制格式,普通文本格式等等; 1.2

m0_61607827的博客 4411

MATLAB地理数据处理 25:植被物候提取及分析模型优化(Savitzky-Golay)

之前我写过一篇使用Savitzky-Golay处理遥感数据,获取地面物候信息的MATLAB代码,但是发现存在一些问题:对物候开始期和物候结束期的阈值设定都为相同值,但是有些研究中,需要根据不同的环境条件,设置不同的物候阈值,所以对其进行相应的修改。

amyniez的博客,欢迎交流讨论 2233

hive 优化

hive 优化

qq_43192537的博客 3006

高质量文献综述原来这么写!借助Gemini 3 Pro+四步法,手把手教你写出有逻辑深度的综述

总结与展望先总结现状,说明前人已经做到什么地步了,再指出缺口,前人没解决什么问题、方法有什么局限等等,最后再在这个缺口的基础上,提出你的未来研究方向。当你有个复杂的研究题目,但没办法拆解出关键词,就可以让Gemini 3 Pro来辅助帮你拆解,并帮你写专业的检索式,若是找英文文献,还能帮你将中文关键词翻译成地道的专业术语。做文献笔记,可以建立文献笔记矩阵,可以用Excel建个表格,横向是文献,纵向是关键要素,包括作者/年份、研究问题/假设、理论框架/模型、研究方法/数据来源、核心结论、局限性/Gap。

智能AI让学术科研更容易 993

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

hive的优化策略

以 on,where 多条件字段顺序,建【多重】分区表,默认开启支持,以分区字段为条件筛选数据,tez引擎:动态分区剪裁支持。控制Mapper和Reducer数量,mapper的启动和初始化开销较大,【数量过多】导致开销大于逻辑处理,浪费资源。从表:不存在以NULL填充,where不能下推,on可以下推。主表:全部显示, on条件不能下推,where可以下推。配置压缩格式,表存储格式,查看是否支持压缩,是否支持切片。【连接键】的值分布不均:值集中的少数分区,其他分区没有值。分桶=>拉链表(分桶表)、抽样。

inori1256的博客 2563

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Hive优化方法汇总

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

南洲.的博客 4854

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hive部分:hive的优化,MapReduce的优化

hive 核心思想: 把 Hive SQL 当做 Mapreduce 程序去优化。 以下 SQL 不会转为 Mapreduce 来执行: select 仅查询本表字段; where 仅对本表字段做条件过滤。 explain 命令可以显示执行计划: EXPLAIN [EXTENDED] query; EXTENDED 可以看到更详细 的信息。 本地模式提高执行效率 本地模式: map...

wyqwilliam的博客 2695

Hive之——Hive SQL优化

一、Hive优化目标在有限的资源下,提高执行效率二、Hive执行HQL——> Job——> Map/Reduce三、执行计划查看执行计划explain [extended] hql四、Hive表优化1、分区静态分区动态分区set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstric...

冰河的专栏 2万+

hive中groupby优化_关于Hive优化的四种方法总结

一、整体架构优化现在hive的整体框架如下,计算引擎不仅仅支持Map/Reduce,并且还支持Tez、Spark等。根据不同的计算引擎又可以使用不同的资源调度和存储系统. 整体架构优化点:1、根据不同业务需求进行日期分区,并执行类型动态分区。 相关参数设置: 0.14中默认hive.exec.dynamic.partition=ture2、为了减少磁盘存储空间以及I/O次数,对数据进行压缩相关参数...

weixin_32154667的博客 2320

Hive之任务优化

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

youziguo的专栏 1415

【hive】limit查询优化

limit不优化会全部查询后,再返回部分 优化后:对数据源抽样返回 开启优化参数: hive.limit.optimize.enable=true //开启对数据源进行采样的功能 hive.limit.row.max.size=100000 //设置最小采样容量。默认10万 hive.limit.optimize.file=10 //可抽样的最大文件数。默认10个 缺点:可能输入中有用的数据永远都不会被抽样到。 (1)配置文件 Hive 的配置文件包括:   A. 用...

开发随笔-猫咪酱 2752

Hive 优化

Hive 优化并行优化小文件优化矢量化查询读取零拷贝优化数据倾斜优化JOIN的时候的倾斜方案一方案二方式1:运行时判断方式2:编译时判断Union优化GROUP BY分组统计的倾斜处理优化1:优化2:MapReduce迭代计算的概念(补充)MapReduce的计算模型MR的迭代Hive优化小总结 并行优化 并行编译 Hive默认情况下,只能同时编译一个SQL到MapReduce代码的转换,并对这个过程上锁。 为了提高效率,同时减少死锁发生的可能性,我们需要将这个一次只能编译一个的操作,优化为并行执行。

qq_45798620的博客 1281

hive执行语句优化

一、类SQL语句优化 1、跟SQL基本一致的优化原则 1.1 尽量原子化操作 尽量避免一个SQL包含复杂逻辑,可以使用中间表来完成复杂的逻辑。 1.2 尽量尽早地过滤数据 尽量先where筛选后再join,减少每个阶段的数据量,对于分区表要加分区条件,只选择需要使用到的字段。 1.3 表链接时尽量使用相同的连接键 当对3个或者更多个表进行join连接时,如果每个on子...

abc200941410128的博客 4583
上一篇: Hive--自定义函数
下一篇: MapReduce on HBase
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值