Hive/MaxCompute SQL性能优化(一):什么是数据倾斜

概念

数据倾斜是指在并行计算模式下(map-reduce框架,数据被切分为N个片段,分发到不同的计算节点上,单独计算),部分节点处理的数据量远大于其他节点,造成该节点计算压力过大,从而导致少数节点的运行时长远远超过其他节点的平均运行时长,进而影响整体任务产出时效,造成任务延迟,这个现象就是数据倾斜。

如何定位任务是否出现倾斜,在哪个阶段出现了倾斜?

对于MaxCompute/ODPS来说,定位是否倾斜,只需要在logview中查看每个mapper/joiner/reducer 阶段的fuxi instance是否有long-tail / data-skews节点,若有,则一定是出现了数据倾斜。

对于hive,看任务执行的过程中如果一直在某个阶段卡在99%,那么大概率是出现了数据倾斜。

如果是joiner阶段长尾,Hive可以配合执行计划以及执行日志中定位是哪个阶段出现的倾斜,稍微有点麻烦,需要一点点定位,步骤大致如下。(手头没有集群无法截图。。)

1、从hive日志中定位长尾节点的"CommonJoinOperator: JOIN struct" 关键字。这里会打印该阶段的关联字段。

2、然后到执行计划中找到这几个字段所处的阶段和关联表名。

如何解决数据倾斜?

定位到是否有倾斜,以及在某个阶段出现的倾斜之后,就可以针对性的去优化。数据倾斜并不是简单的调整并行度就可以解决的,而是需要针对特定情况动态使用解决方案。

由于篇幅原因,后续我会出一个系列,开一个新坑,详细讲解各种阶段的数据倾斜的解决方案以及其他SQL性能调优实战方案,感兴趣的可以关注收藏一波。

如:

Map端长尾

Join端长尾优化

Reduce端长尾优化

....

如果我的文章对你有帮助,请帮忙转发/点赞/收藏,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值