Apache Spark:如何通过Spark Web UI检测数据倾斜
用Spark Web UI检测数据倾斜的方法
当然可以用Spark Web UI快速检测数据倾斜,比逐个执行groupby/count高效得多,具体可以从以下几个核心页面入手:
1. 从Stages页面抓任务分布异常
- 进入Web UI的Stages标签页,定位到目标作业对应的Stage
- 重点关注任务列表里的Shuffle Read Size/Records和Duration列:
- 如果绝大多数任务的处理数据量、耗时都处于同一水平,但有少数几个任务的Shuffle数据量是其他任务的几十甚至上百倍,或者耗时是其他任务的数倍,基本可以判定存在数据倾斜
- 也可以看Input Size/Records列,如果某个任务的输入数据量远高于平均值,大概率是数据源本身存在倾斜
2. 通过Shuffle详情定位具体倾斜键
- 在Stage页面点击目标Stage的Shuffle Read链接,进入Shuffle详情页
- 找到数据量最大的几个Reduce任务,点击对应的Shuffle Blocks链接
- 在弹出的页面中,能看到该Reduce任务读取的所有Shuffle块信息,若某个Map任务输出的块体积特别大,那对应的键就是导致倾斜的连接键或分组键
3. 从Executors页面看节点负载差异
- 切换到Executors标签页,查看每个Executor的Shuffle Read和Task Time指标
- 如果某个Executor的Shuffle读取量远高于其他节点,或者任务总执行时间明显更长,说明这个节点承接了倾斜的数据处理任务,也能侧面印证数据倾斜的存在
补充:SQL任务结合Execution Plan确认
- 若是Spark SQL任务,在SQL标签页找到目标查询,点击Details查看执行计划
- 重点看Exchange(Shuffle)节点(比如HashJoin、GroupBy对应的Shuffle操作),如果某个节点的输出数据量差异极大,也能快速定位倾斜点
内容的提问来源于stack exchange,提问作者svg_af_2
相关产品推荐
相关产品推荐

