hive join 数据倾斜 真实案例
来源:互联网 发布:crm软件对比 编辑:程序博客网 时间:2024/04/29 22:22
Hive或者MR处理数据,不怕数据量大,就怕倾斜。hive里大表join的时候,数据倾斜就是个很头疼的问题。本博主就遇到了一个真实案例,特意记录下来,有需要的同学可以参考
1.查了5个小时还没结束的sql语句
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
很简单的一个hql语句,优化的空间也不是很大(例子中的addr数据量比cus小,应该讲addr放在前面驱动join)。tableA的量级为亿级,tableB的量级为几百万级别。就这么一个简单的sql,尼玛从上午十点半开始跑,跑到下午三点半还没有跑完。实在受不了了,kill掉了。
2.初步分析
首先上个查询过程中的图
看到这种情况,稍微有点经验的同学第一反应肯定就是:卧槽,这尼玛肯定是数据倾斜了。没错,map早就完工了,reduce阶段一直卡在99%,而且cumulative cpu的时间还一直在增长,说明整个job还在后台跑着。这种情况下,99%的可能性就是数据发生了倾斜,整个查询任务都在等某个节点完成。。。
3.分析那部分数据产生了倾斜
问题既然已经定位了,那接下来就是需要解决问题了。正好不巧的是,集群这几天还出了一些状况。so,首先为了确认到底是集群本身的问题,还是代码的问题,先找了另外两个表,都是亿级数据。这两个表不存在数据倾斜的情况,join一把试了试,两分钟之内结果就出来了。万幸,说明这会集群已经没有问题了,还是查查数据跟代码吧。
代码本身很简单,那就沿着数据倾斜的方向查查吧。因为上面的两个表是根据id关联的,那如果倾斜的话,肯定就是id倾斜了哇。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
结果为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
对于有上亿数据的一个表来说,这数据也算不上倾斜多厉害嘛。最多的一个key也就五百多万不到六百万。好吧,先不管了,再查一把另外一个表
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
结果也很快出来
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这数据倾斜,也不是特别严重嘛。
不过再把这两个结果一对比,尼玛恍然大悟。两个表里最多的一个key都是192928,一个出现了将近600万次,一个出现了将近40万次。这两个表再一join,尼玛这一个key就是600万*40万的计算量。最要命的是,这计算量都分配给了一个节点。我数学不太好,600万*40万是多少,跪求数学好的同学帮忙计算一下。不过根据经验来看的话,别说5个小时,再添个0也未必能算得完。。。
4.如何解决
既然找到了数据倾斜的位置,那解决起来也就好办了。因为本博主的真正需求并不是真正要算两个表的笛卡尔积(估计实际中也极少有真正的需求算600万*40万数据的笛卡尔积。如果有,那画面太美我不敢看),所以最easy的解决方案,就是将这些key给过滤掉完事:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
将此代码重新提交,5min时间,job跑完收工!
from:http://blog.csdn.net/bitcarmanlee/article/details/51694101
- hive join 数据倾斜 真实案例
- hive join 数据倾斜 真实案例
- hive join 数据倾斜 真实案例
- [Hive]Hive数据倾斜(大表join大表)
- hive数据倾斜(大表join大表)
- Hive数据倾斜(大表join大表)
- hive中join导致的数据倾斜问题排查
- 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化
- Hive 数据倾斜总结
- hive 数据倾斜总结
- hive 数据倾斜总结
- hive数据倾斜总结
- hive数据倾斜总结
- Hive数据倾斜总结
- Hive数据倾斜总结
- hive数据倾斜总结
- Hive 数据倾斜总结
- HIVE数据倾斜
- 实验吧WEBWP(一)
- 2
- [译] TensorFlow 白皮书
- ACM
- eclipse中新版导入文件运行不了的问题.
- hive join 数据倾斜 真实案例
- JAVA面试题06-Mysql索引
- model
- C++ 继承中的对象模型
- JAVA多线程的应用场景和应用目的举例
- Js`HTML_用Javascript对字符串进行特殊符号检查以及html可伸长表单
- maprecuce系列(5)——map端join算法实现
- centos7下安装mysql问题
- Java finally执行问题