1.查看Web UI
- job找出运行慢的job,方便定位代码块
- stages 找出运行慢的stage,方便定位代码块,观察shuffle量,可跟踪具体log,看各个阶段运行时间
- storage 缓存的大小是否在预期范围内,有时候过大的缓存也可能导致运行慢
- environment 一般不需要看,查看参数时可以看
- executor 观察是否有任务倾斜(大多数task集中在某个executor)和数据倾斜以及GC状况是否良好,以及查看Fail task的log
- sql 查看sql的执行过程,输入输出及其大小。看是否存在优化的空间(比如hint 指定join的方式),具体问题具体分析
2.根据log信息大致定位慢的原因
3.查看代码块
通过上述步骤,大部分情况下我们可以找到是哪个job哪个stage的哪块代码(或者sql)运行的慢,此时我们需要进行初步排查,看代码逻辑是否合理
通常情况下,一个业务可以通过多种代码逻辑实现,当你接手别人的代码的时候,不应该是调整参数(比如盲目增大内存),而是应该要来业务文档和技术文档(没有?自己梳理吧),结合代码和文档梳理,当前代码是否为业务逻辑的最优解。