1、spark任务数据倾斜现象
判断spark任务是否发生数据倾斜有以下几种:
- 大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时,这表明执行时间慢的任务分配了很多数据,导致执行拖慢整个作业的执行速度。
- 原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,可能是某一个task拉取了过多的数据量导致发生内存溢出。
- 从spark webui上面观看Executor,发现大多数task都是在某一个Executor上执行,而其他的Executor上并没有跑task任务,这说明数据都被发送到一台Executor执行,发生数据倾斜。
- 从spark webui上看执行时间比比较长的stage,然后查看stage中matex矩阵的百分位数分布情况,如果前50,75都没有执行,接近100%的时候任务全部执行完,说明发生数据倾斜,这也很好理解,当执行到100%才有数据,说明前50%,75%阶段都没有task执行,而只有一个task在执行,这个task拖慢了作业的执行,必然市因为数据量过大导致的。
大约 25 分钟