zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

Spark UI (1) - Jobs页面

SparkUI 页面 Jobs
2023-06-13 09:11:44 时间

接上文Spark UI基础介绍,以一段sql为例介绍Jobs页面的内容:

select t1.dt,
       t2.cooperation_type,
       t1.poi_id,
       t1.diff_qty
  from mart_xxx.fact_sc_gms_diff_report t1
  left join mart_xxx.dim_op_poi t2
    on t1.grid_poi_id=t2.poi_id
 where t1.dt = '20220410'

在Jobs页面可以看到上面的SQL生成了3个job, 该页面还有一个Event Timeline的链接, 点击可以看到作业的时间轴。

1.Event Timeline

点击Event Timeline后可以看到以下信息:时间线会显示Executor加入和退出的时间点, 以及job执行的起止时间.

2.job详情页面

点击job描述里的链接就可以进入对应job的详情页面, 首先看job0:job详情页面会展示这个job包含了哪些stage, 以及stage执行信息.

另外点击DAG Visualization 可以看到job的执行计划也就是DAG图:下图即job0对应的stage0及job1对应的stage1.

然后在看下触发job2的DAG图:

可以看到stage2和stage3被跳过(skipped)了。

为啥可以被跳过? 原因是spark shuffle的数据会写到磁盘固化, 当上游stage(stage2)和之前执行过的stage(stage0)相同时, 可以直接使用之前的结果, 所以stage2可以被跳过。

FAQ:

1.上游stage的Shuffle Write等于下游stage的 Shuffle Read

这个算常识, 可以在作业执行时通过上游stage的Shuffle Write量 减去 下游stage的Shuffle Read量判断执行进度. 另外还可以通过这个常识判断task是否有数据倾斜, 例如还剩1个task没执行完, 但是Shuffle Read量与上游Shuffle Write量相差很大, 那么这个正在执行的task很有可能是数据倾斜的task。

2.job提交间隔较大, 是什么情况

Spark默认的job调度模式是FIFO, 基本上前一个job执行完就会提交下一个job. 但是也有两个job间隔比较久的例子. 请注意:Spark UI只展示job信息, 如果Driver在前一个job执行完成后执行其他代码, 或者在对下一个job的提交进行预计算, 这部分耗时是不会显示在UI上的, 建议通过Driver的log判断具体原因。