【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化
数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题。常见的Hive调优的方法:列剪裁、Map Join操作、
Group By操作、合并小文件。
一、表现
1.任务进度长度为99%,在任务监控页面中发现只有几个 reduce 子任务未完成;
2.单一 reduce 记录与平均记录数差异过大(大于3倍),最长时长>>平均时长;
3.job数多的,效率低,多次关联后,产生几个jobs,起码半小时以上才跑完;
二、原因
1.key分布不均;
2.业务数据本身问题;
3.建表有问题;
4.sql语句本身数据倾斜;
数据倾斜问题:
|
关键词 |
情形 |
后果 |
|
join |
1.小表与大表.其中一表较小,但key集中; 或空值过多; |
分发到一个或几个reduce上数据远大于平均值;空值由一个reduce处理,很慢 |
|
group by |
group by 维度过小,某值数量过多 |
处理某值的reduce很耗时,解决:用sum() group代替 |
|
count distinct |
某特殊值过多 |
处理此特殊值reduce耗时 |
三、解决思路
1.好的模型设计事半功倍;
2.解决数据倾斜问题;
3.减少job数;
4.设置合理的map,reduce 的task 数,有效提升性能;
5.自己动手写sql 可以解决数据倾斜;
6.对sum, count不存在数据倾斜问题,自己写;
7.对小文件合并;
8.优化时把握整体,单个作业最优不一定整体最优。
(注:sql相关→(1)倾斜的数据用 map join,不倾斜的数据用
join;
个具有相同列的数据类型的结果放到一起显示,并且不去重;
(3)有几个列参与join就有几个job,不是看独立的语句(eg.select)有几个!)
四、解决方案
4.1 参数调节
hive.map.aggr = true (map 端部分聚合,当于 combiner)
hive.groupby.skewindata = true (有数据倾斜时负载均衡)
4.2 sql语句调节
(1) 如何join:关于驱动表的选取,应选分布均匀的作为驱动表;做好列剪裁与
filter 操作,达到两表 join 时,数量变小的效果。
(2) 大小表join:使用map join,让小表先进内存,在 map 端完成reduce 。
(3) 大表 join 大表:把空值 null key变成字符串加上随机数,倾斜数据分到不同 reduce 上。
(4) groupby 维度过小:采用sum() group by 代替count (distinct) 完成计算。
五、典型案例
5.1. 空值产生的数据倾斜:userid为空的表去 join另一表
方法一:为空的userid 不参与关联:select * from a join b on a.userid is not null and a.id = b.id
方法二:赋空值分新的 key值,字符串加上随机数。(比方法一好,io少了,作业job也少了:方法一读取log 为2次,job为2;方法二读取的job 为1)
5.2 不同数据类型关联的数据倾斜:个表中,一个为 string,一个为
int
解决方法:把数值类型转化为 string。
eg. select *from a left join b on (a.id = cast(b.id as string))
5.3 小表 join 大表时,小表很大:一般 map join会有 bug
两个待连接表中,小表可以进内存(小表小于内存装得下),而大表很大。可以将小表复制多份,让每个Map Task 内存中存在一份(比如放到 hash table 中),然后只扫描大表。
对大表中每条记录 key-value,在 hash table中查找是否有相同的 key 记录,如果有,连接后输出即可。(不用 reducer,直接在 map端就可以完成
join)
【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化的更多相关文章
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优
摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优[转]
调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 ...
- spark调优篇-数据倾斜(汇总)
数据倾斜 为什么会数据倾斜 spark 中的数据倾斜并不是说原始数据存在倾斜,原始数据都是一个一个的 block,大小都一样,不存在数据倾斜: 而是指 shuffle 过程中产生的数据倾斜,由于不同的 ...
- Spark 调优之数据倾斜
什么是数据倾斜? Spark 的计算抽象如下 数据倾斜指的是:并行处理的数据集中,某一部分(如 Spark 或 Kafka 的一个 Partition)的数据显著多于其它部分,从而使得该部分的处理速度 ...
- 【Spark调优】数据倾斜及排查
[数据倾斜及调优概述] 大数据分布式计算中一个常见的棘手问题——数据倾斜: 在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或j ...
- 《Kafka权威指南》读书笔记-操作系统调优篇
<Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...
- 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优
一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体 1.代码调优 1.避免创建重复的RDD,尽 ...
- 大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)
第8章 压缩和存储(Hive高级)8.1 Hadoop源码编译支持Snappy压缩8.1.1 资源准备8.1.2 jar包安装8.1.3 编译源码8.2 Hadoop压缩配置8.2.1 MR支持的压缩 ...
- Hive(十二)【调优】
目录 1.Fetch抓取 2.本地模式 3.表的优化 3.1大小表join 3.2大表Join大表 3.3map join 3.4group By 3.5 count(distinct) 3.6笛卡尔 ...
随机推荐
- Oracle oledb 打包并集成到程序安装包(VC ADO訪问Oracle)
近期有一个项目和oracle交互,我用的是ADO的方式进行试问操作. 首先把数据库连接的东东记录一下,老了记性不好啊! 操作例如以下: //连接串这么写的话就能够不用配置 tnsnames.ora配置 ...
- 内核顶层Makefile相关2
http://www.groad.net/bbs/simple/?f104.html if 函数 if 函数的语法有两种形式: () $(if <condition>, <then ...
- git+jenkins
开发写代码的演变 一个开发单打独斗,撸代码,开发网站,自由自在 多个开发同时开发一个网站,同时改一份代码.但是同时改一个文件会导致冲突 分支结构,每天上班第一件事克隆代码,下班前最后一件事合并代码 好 ...
- Django-extra的用法
## select提供简单数据 # SELECT age, (age > 18) as is_adult FROM myapp_person; Person.objects.all().extr ...
- python--面向对象—接口
开放封闭原则依赖导致原则接口隔离原则继承多态抽象类和接口类 编程思想:为子类做规范 归一化设计:几个类都实现了相同的方法 抽象类:最好单继承,且可以简单的实现功能 接口类:可以多继承,且最好不实 ...
- caffe搭建以及初步学习--win7-vs2013-gtx650tiboost-cuda8.0-cifar10训练和测试-2-快速解决方案cifar10_quick_solver.prototxt
首先安装好显卡----已经装好了?喜大普奔!没装好?那就用cpu,也是一样的. 拷贝cudnn v5.0 头文件和库文件以及执行文件到cuda8中 -------------------------- ...
- 实现单击列表头对ListView的动态排序
排序是根据列的类型来的,就ID列来说,int类型的排序结果是3,5,17,而如果你把该列类型改为string,结果就会是17,3,5,如果你定义列的时候不加类型,默认是string,如果是自定义类型, ...
- OTL中文乱码 OTL UTF8
在用unixODBC连接MySQL的时候字符编码是由odbc支持的,不须要C++编译OTL的时候加上什么编译条件. 假设你的数据库使用的编码是UTF-8,你要从这个数据库读数据.并且还要将结果放到这个 ...
- 基于EasyDarwin EasyPusher实现Android手机直播推送功能
EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...
- Struts2基本概念
一.Struts2体系结构 : 1.Web浏览器请求一个资源. 2.过滤器Dispatcher查找方法,确定适当的Action. 3.拦截器自动对请求应用通用功能,如验证和文件上传操作. 4.Acti ...