一、问题现象
租户反馈,任务执行时长加长,执行过程中任务卡在 99%,大概率是出现了数据倾斜
二、排查过程
数据倾斜大多数都是大 key 问题导致的。排查方法如下:
1.时间判断
reduce 的时间比其他 reduce 时间长的多,大部分 task 在 1 分钟左右完成,只有 r_000095 这个 task 执行一个多小时还没完成。
如果每个 reduce 执行时间差不多,都特别长,不一定是数据倾斜导致的,可能是 reduce 设置过少导致的;有时候,某个 task 执行的节点可能有问题,导致任务跑的特别慢。这个时候,mapreduce 的推测执行,会重启一个任务。如果新的任务在很短时间内能完成,通常则是由于 task 执行节点问题导致的个别 task 慢。但是如果推测执行后的 task 执行任务也特别慢,那更说明该 task 可能会有倾斜问题。
2.通过任务 Counter 判断
Counter 会记录整个 job 以及每个 task 的统计信息:
比较不同的 task counter 的输入记录数,看是否有很大的数据量的差距。
3.定位 SQL 代码
具体请参照:大神博文地址