Spark UI(下):深入解读Spark作业的“体检报告”
- 深入了解
- 翻译
- 解释
- 总结
本文深入解读了Spark作业的“体检报告”第二期,通过分析Spark UI的二级入口,详细介绍了SQL、Jobs和Stages的执行计划和度量指标。在SQL详情页中,重点讨论了Exchange、Sort和Aggregate的度量指标,以及如何根据这些指标进行调优分析。对于Exchange,文章提供了丰富的Metrics来刻画Shuffle的计算过程,为调优提供了洞察与思路;对于Sort和Aggregate,文章分别介绍了内存消耗的度量指标,并指导读者如何根据这些指标进行参数设置以提升执行性能。在Jobs详情页中,文章简洁直观地罗列了隶属于当前Job的所有Stages,并指出了需要通过“Description”超链接跳转以获取每个Stage的执行细节。整体而言,本文通过深入的技术分析,为读者提供了对Spark作业执行过程的全面了解和调优指导。 文章还介绍了Stage详情页的信息量较大,包含Stage DAG、Event Timeline与Task Metrics。通过分析Event Timeline,读者可以了解分布式任务调度与执行的时间花销,从而判断作业是否存在调度开销过大或Shuffle负载过重的问题。而Task Metrics提供了详尽的量化指标,包括统计分布信息,帮助读者判定作业的任务负载是否存在倾斜,并提供了消除不均衡的调优方法。此外,文章还提到了如何通过Spill指标计算数据的内存消耗,以及如何利用本地性级别来调度任务,保证数据不动、代码动的原则。 总的来说,本文通过对Spark UI各个入口的详细解读,为读者提供了全面的性能调优思路和方法。同时,文章还提醒读者在使用Spark UI时需要注意端口的变化,以及分享了关于定位数据倾斜问题的思考题,为读者提供了更多的思考和交流空间。
《Spark 性能调优实战》,新⼈⾸单¥59
全部留言(10)
- 最新
- 精选
- Geek_d50b3e置顶我有个问题。我是2个大表关联shullfe 的时候看到很多executor都是空就executor 有数,倾斜了是怎么回事?2022-03-18
- 王欢spark shuffle read中max和median的比值大小,可以衡量数据倾斜程度
作者回复: 没错~ 正解,满分💯
2021-10-215 - 敬彦辉Spill(Memory)和 Spill(Disk)这两个指标还是不太清楚,之前遇到过一个任务,最大执行时间的task,它的Spill(Memory)有3g,Spill(Disk)只有200m,这些数据是内存存了3g,内存存不下又溢出到磁盘吗?这种场景该怎么优化,老师帮忙给解答下
作者回复: 关于Spill,其实就是咱们在Shuffle那讲,介绍的生成Shuffle中间文件的过程。在Map阶段,Spark先往内存数据结构里面写,写不下了,就Spill到磁盘的临时文件。 Spill数据在内存中的总尺寸,就是Spill(Memory),在磁盘中的总大小,就是Spill(Disk)。其实不管内存设置多大,Spill都是难免的,这倒没什么可怕的。 所以说内存不够大,不是问题,问题是CPU、内存、数据三者是不是平衡,这一点很重要,这一部分可以参考“三足鼎立”的调优方法去平衡。再有一个思路,就是把Shuffle干掉,自然就没有Spill了,干掉Shuffle的方法,可以参考Broadcast Join。再有,即便干不掉Shuffle,还可以用“能省则省、能拖则拖”的办法,减少需要Shuffle的数据量~ 办法其实有很多,都写在咱们专栏的不同课程里啦~
2021-10-2224 - onee老师,有几个疑问。Peak memory是单个executor堆内存的使用峰值还是单executor内execution memory的使用峰值?其次,Peak memory Total是stage所有task的峰值之和吗?
作者回复: 是的~ Execution memory使用峰值,不包括Storage memory。另外,Peak memory Total是某一时刻,整个集群在运行时的内存消耗峰值,不是所有task的内存用量,也不是你说的“所有task的峰值之和”。 你可以这么理解,你把一个Job的运行时间,看作是横坐标,纵坐标,是每个时刻这个Job对于集群内存的消耗。每个时刻所运行的tasks数量,自然不是整个Job的所有tasks,而是其一部分,一个“侧切面”。这条曲线的峰值,就是这里的Peak memory Total~
2021-10-2024 - Sean磊哥,有个疑问想要请教下,您说的到的 "Peak memroy,某个Job在某个时刻对于集群内存的消耗,比然这个时刻不会包含所有task,而是这个时刻正在runing的task" 对于这一点我个人理解为针对这个时刻因该是numActiveTasks最大时所消耗的内存,也即配置参数所示最大为6个axtivetask时的消耗peak memory是最大的(这个磊哥截图ui 上的配置executor=2,cores=3,和磊哥最开始表格里给出的executor=3g不一致) 如果这里理解没错的话,那么根据案例中peak memory=18.8GB来说,可调整executor.memroy=10G(18.8/6≈3.13G,3.13 * 3 = 9.39G,当然这里我省略了Storage,User,Reserved的消耗) 我个人理解就是这样的,不知道是否正确,求磊哥解惑,感谢~
作者回复: 赞👍,是的,就是这个意思~
2021-10-3123 - Sean问下磊哥,发现有的任务Peak Execution Memory为0这种情况会是什么原因导致呢?任务执行倒是正常
作者回复: 这个就蹊跷了,有任务的上下文吗?发出来一起看看~ 你说的Peak Execution Memory为0,是整个集群,还是by task的各种quantile值?
2021-10-252 - onee老师,sparksql执行计划页中的peak memory total(min,mid,max),指的是peak execution memory吗?
作者回复: 对,Execution memory
2021-10-20 - 狗哭老师太给力了
作者回复: 欠的债迟早是要还的,哈哈
2021-10-20 - Geek_6048ffEvent Timeline中空白比较多是代表啥意思呀2022-06-152
- 〆、维生素ゝ您好,请教一个问题,stage上的task数量可以精确计算出来吗?我的task read是空 会是啥原因呀2022-06-14