Hive Join优化
在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化:
1. 只支持等值连接
2. 底层会将写的HQL语句转换为MapReduce,并且reduce会将join语句中除最后一个表外都缓存起来
3. 当三个或多个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个mapreduce
具体的优化建议:
1. 合理的设置map和reduce数量
jvm重用。可在hadoop的mapred-site.xml中设置jvm被重用的次数,参数mapred.job.reuse.jvm.num.tasks
2. 对于任务重没有依赖关系的阶段开启并发执行,设置属性:set hive.exec.parallel=true
3. 查询分区表时,在查询条件中指定分区
4. 尽量使用left semi join 替代in、not in、exists
因为left semi join在执行时,对于左表中指定的一条记录,一旦在右表中找到立即停止扫描,效率更高
5. 当多个表进行查询时,从左到右表的大小顺序应该是从小到大。原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算
6. 对于经常join的表,针对join字段进行分桶,这样在join时不必全表扫描
7. 小表进行mapjoin
如果在join的表中,有一张表数据量较小,可以存于内存中,这样该表在和其他表join时可以直接在map端进行,省掉reduce过程,效率高。设置方式主要分两种:
1)自动方式
set hive.auto.convert.join=true;hive.mapjoin.smalltable.filesize,设置可以mapjoin的表的大小,默认值是25Mb
2)手动方式
select /*+ mapjoin(A)*/ x.a, y.b from t_x x join t_y y on x.id=y.id;
8. 同一种数据的多种处理:从一个数据源产生的多个数据聚合,无需每次聚合都需要重新扫描一次。
例如:任务重需要执行insert overwrite table t_y select * from t_x;和
insert overwrite table t_z select * from t_x;
可以优化成:from t_x insert overwrite table t_y select * insert overwrite table t_z select *
9. join中的数据倾斜处理
set hive.optimize.skewjoin=true;
set hive.skewjoin.key=100000;
当单个reduce节点处理数据阈值,会进行skewjoin,建议设置为平均数据量的2-4倍。
原理:会产生两个job,第一个job会将超过hive.skewjoin.key设置值的记录的key加上一些随机数,将这些相同的key打乱,然后分配到不同的节点上面进行计算。最后再启动一个job,在第一个job处理的基础上(即第一个job的reduce输出结果)再进行处理,将相同的key分发到相同的节点上处理。因为会产生两个job进行处理,在实际使用中还是要注意以及阈值的设置。
10. limit调优
limit语句通常是执行整个语句后返回部分结果。但通过设置参数set hive.limit.optimize.enable=true,将针对查询对元数据进行抽样。同时可能还需要设置以下两个参数:
set hive.limit.row.max.size=10000;设置最小的采样容量
set hive.limit.optimize.limit.file=20;设置最大的采样样本数
这种优化方式存在一个缺点:有可能部分数据永远不会被处理到
关注微信公众号:大数据学习与分享,获取更对技术干货
Hive Join优化的更多相关文章
- hive join 优化 --小表join大表
1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高.hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配.从而省去red ...
- Hive Join优化经验
大表x小表 这里可以利用mapjoin,SparkSQL中也有mapjoin或者使用广播变量能达到同样效果,此处描述HQL // 开启mapjoin并设定map表大小 set hive.auto.co ...
- hive join 优化
common join : 即reducer join,瓶颈在shuffle阶段,会产生较大的网络io: map join:即把小表放前面,扫描后放入每个节点的内存,在map阶段进行匹配: 开启map ...
- hive的join优化
“国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...
- Hive篇---Hive使用优化
一.前述 本节主要描述Hive的优化使用,Hive的优化着重强调一个 把Hive SQL 当做Mapreduce程序去优化 二.主要优化点 1.Hive运行方式:本地模式集群模式 本地模式开启本地模式 ...
- Hive性能优化【严格模式、join优化、Map-Side聚合、JVM重用】
一.严格模式 通过设置以下参数开启严格模式: >set hive.mapred.mode=strict;[默认为nonstrict非严格模式] 查询限制: 1.对于分区表,必须添加where查询 ...
- Hive性能优化
1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...
- Hive任务优化(2)
JOIN优化 1.大多数情况下,Hive会对每对Join连接对象启动一个MapReduce任务. 2.多表关联时,如果每个ON子句都使用相同的连接键的话,那么只会产生一个MapReduce Job. ...
- Hive性能优化上的一些总结
https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...
随机推荐
- 脚手架安装react
//1 npm install -g create-react-app //2 create-react-app xxx //xxx项目名称 //3 cd xxx //xxx项目名称 npm star ...
- 用C写一个简单的推箱子游戏(一)
我现在在读大二,我们有一门课程叫<操作系统>,课程考查要求我们可以写一段程序或者写Windows.iOS.Mac的发展历程.后面我结合网上的资料参考,就想用自己之前简单学过的C写一关的推箱 ...
- Git软件操作过程
一.下载 Git 二.下载Git小乌龟-TortoiseGit 三.汉化-去官网下载,官网地址 https://tortoisegit.org/download/
- 例题3-3 回文词(Palindromes, UVa401)
输入一个字符串,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓 回文串,就是反转以后和原串相同,如abba和madam.所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE.注意, ...
- PO模式学习笔记
框架: 1.PO模式应用(测试对象和测试用例分离)(写到简历中) 2.引入ddt 3.深入分层:测试数据分离 4.遵循原则:测试用例的独立性 5.深入分层:元素定位分离 6.框架优化:提取basepa ...
- Java NIO:选择器
最近打算把Java网络编程相关的知识深入一下(IO.NIO.Socket编程.Netty) Java NIO主要需要理解缓冲区.通道.选择器三个核心概念,作为对Java I/O的补充, 以提升大批量数 ...
- php 数组与URL相互转换
php为了数组与url参数相互转换提供了两个函数: 1,数组转换为带&的URL的字符串 例如: $arr =['title'=>'我是小白','name'=>'真的很白','tex ...
- sync.WaitGroup的使用以及坑
all goroutines are asleep - deadlock 简单使用: package main import ( "sync" ) type httpPkg str ...
- selenium 图片懒加载
from selenium import webdriver options = webdriver.ChromeOptions() prefs = {} prefs['profile.managed ...
- UVA 12298 Super Poker II (FFT)
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using ...