发布时间:2022-11-08 14:00
数据倾斜是指在并行计算模式下(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端长尾优化
....
如果我的文章对你有帮助,请帮忙转发/点赞/收藏,谢谢!
笔记【Two-Stream Convolutional Networks for Action Recognition in Videos】
Github Star 全球唯一的国产程序员!Apache 顶级项目Commiter。
手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】
开利网络组织第七期链企来资源对接沙龙会,让企业“链企来”,让资源变现快!
Qt网络编程-使用QNetworkInterface获取网卡信息和IP地址Demo(7)
python连接netcat监听的端口_权限不足?端口被占?内网渗透之反弹Shell