项目场景:

使用用2.x跑任务,产看耗时的spark job, stage,发现job和stage的dag信息缺失

问题描述:

sparkUI 显示dag信息缺失问题: 使用用2.x跑任务,查看spark 性能问题,从spark ui选择出最耗时的任务,进去查看,有一个任务有100多个job, 有几百个stage,程序跑完看前面 job和stage的dag图,提示没有了

按照UI提示,提高这两个值,发现一点用都没有,而且这两个值也没有超过spark的默认值1000,奇怪,怀疑是否spark ui提示错误信息了

问题如下图:


spark.ui.retainedStages=5000,总stage数量没有超过5000, job数量没有超过1000.

原因分析:

分析问题思路:从页面信息入手,进行源码分析

把页面提示信息,直接到spark源码里面进行搜索,找出页面信息
直接找出页面的源码(idea CTRL+SHIFT+F 搜索 No visualization information available )

function renderDagViz(forJob) {// If there is not a dot file to render, fail fast and report errorvar jobOrStage = forJob ? "job" : "stage";if (metadataContainer().empty() ||metadataContainer().selectAll("div").empty()) {var message ="<b>No visualization information available for this " + jobOrStage + "!</b><br/>" +"If this is an old " + jobOrStage + ", its visualization metadata may have been " +"cleaned up over time.<br/> You may consider increasing the value of ";if (forJob) {message += "<i>spark.ui.retainedJobs</i> and <i>spark.ui.retainedStages</i>.";} else {message += "<i>spark.ui.retainedStages</i>";}graphContainer().append("div").attr("id", "empty-dag-viz-message").html(message);return;}


原来点击DAG显示,的js里面把dag-viz-metadata进行显示和隐藏而已,说明数据是之前就生成好了,只是目前数据是空的。



改了还不行:
继续查StagePage.class 搜索dag

 val dagViz = UIUtils.showDagVizForStage(stageId, operationGraphListener.getOperationGraphForStage(stageId))
找到:/** Return the graph metadata for the given stage, or None if no such information exists. */def getOperationGraphForStage(stageId: Int): Option[RDDOperationGraph] = synchronized {stageIdToGraph.get(stageId)}

stageIdToGraph 的stage信息删除是由cleanStage引起的

/** Clean metadata for the given stage, its job, and all other stages that belong to the job. */private[ui] def cleanStage(stageId: Int): Unit = {completedStageIds.remove(stageId)stageIdToGraph.remove(stageId)stageIdToJobId.remove(stageId).foreach { jobId => cleanJob(jobId) }
}

找找在哪触发cleanStage,发现在trimStagesIfNecessary和trimJobsIfNecessary触发

/** Clean metadata for old stages if we have exceeded the number to retain. */
private def trimStagesIfNecessary(): Unit = {if (stageIds.size >= retainedStages) {val toRemove = math.max(retainedStages / 10, 1)stageIds.take(toRemove).foreach { id => cleanStage(id) }stageIds.trimStart(toRemove)}
}
/** Clean metadata for old jobs if we have exceeded the number to retain. */
private def trimJobsIfNecessary(): Unit = {if (jobIds.size >= retainedJobs) {val toRemove = math.max(retainedJobs / 10, 1)jobIds.take(toRemove).foreach { id => cleanJob(id) }jobIds.trimStart(toRemove)}
}

找找 retainedJobs 和retainedStages 的配置是多少?

  // How many jobs or stages to retain graph metadata forprivate val retainedJobs =conf.getInt("spark.ui.retainedJobs", SparkUI.DEFAULT_RETAINED_JOBS)private val retainedStages =conf.getInt("spark.ui.retainedStages", SparkUI.DEFAULT_RETAINED_STAGES)val DEFAULT_RETAINED_STAGES = 1000val DEFAULT_RETAINED_JOBS = 1000
发现只有改spark.ui.retainedJobs和spark.ui.retainedStages参数,但改了木有用啊。。。崩溃。。。了。。。
最后一招:把源码改一下,在清理 stage那里增加log,看看


trimStagesIfNecessary()
trimJobsIfNecessary()
源码里面都打了 log去看, stage超过1000,不改这2个参数确实跑去删DAG, 改大发现没删DAG,但在页面也没看到DAG信息,气死 ,见鬼了

解决方案

spark-default.conf里面新增配置

spark.ui.timeline.tasks.maximum=100000

spark ui job和stage的dag图查看过去运行的任务,查不到,分析源码解决问题相关推荐

  1. HTML5七夕情人节表白网页(粉色的情人节爱心飞出ui特效) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心

    HTML5七夕情人节表白网页❤粉色的情人节爱心飞出ui特效❤ HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白 这 ...

  2. 匹敌一切的通达信【进场决战】副图/选股指标 自用还挺准的好公式 源码分享

    匹敌一切的通达信[进场决战]副图/选股指标 自用还挺准的好公式 源码分享 [本文感谢好公式网的通达信公式栏目的老顽童提供源码技术指导意见.] aa:=winner(c+c15/100)100; bb: ...

  3. 酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文源码齐全)

    下载地址:酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文源码齐全)-Web服务器文档类资源-CSDN下载 ├── java swing mysql实现的酒店管理系统项目源码 ...

  4. 图穷了,来搞一搞(内附源码)

    本章继续我们的爬虫教程,爬什么呢 ,还是斗图,娱乐性的东西,为什么要爬? 因为我图库空了,发现这个网址的图库还是很丰富的. 「注意:如下文,是封装后拆分的,所以详情参照源码」 因此,想了想,可以造它. ...

  5. 三张图-帮助理解腾讯开源毫秒服务引擎msec源码

    第一张:UML图 链接:https://www.processon.com/view/link/5852139ce4b05a02846e5c11 (虚线表示基类) 不是我故意画得那么复杂,而是原本就那 ...

  6. Security 登录认证流程详细分析 源码与图相结合

    最近在写毕业设计的时候用这个框架,小伙伴给我提了个多种登录方式的需求,说仅仅只有账号.密码登录不太行,说让我增加几种方式,如:手机短信验证登录.邮箱验证登录.第三方登录等等(前两个已经实现,第三方登录 ...

  7. spark读取文件源码分析-1

    文章目录 1. 问题背景 2. 测试代码 3. 生成的DAG图 1. job0 2. job1 4. job0 产生的时机源码分析 1. 调用DataFrameReader.load,DataFram ...

  8. Spark UI界面原理

    当Spark程序在运行时,会提供一个Web页面查看Application运行状态信息.是否开启UI界面由参数spark.ui.enabled(默认为true)来确定.下面列出Spark UI一些相关配 ...

  9. Spark源码分析之二:Job的调度模型与运行反馈

    在<Spark源码分析之Job提交运行总流程概述>一文中,我们提到了,Job提交与运行的第一阶段Stage划分与提交,可以分为三个阶段: 1.Job的调度模型与运行反馈: 2.Stage划 ...

最新文章

  1. 使用Crypto++的AES GCM对称加密
  2. Db4o结合Linq、Lambda表达式的简单示例
  3. python生成器应用中的一个要点
  4. 计算机不读三星硬盘分区,电脑磁盘分区指南!一分钟就学会
  5. ipad能安装python么_ipad能下载python么
  6. 【Android自定义View】Bitmap的绘制和颜色滤镜
  7. popen 如何获取指令执行情况_php通过popen获取的一个命令的返回值如何分析出来...
  8. SLM2110 600V 2A 逆变电源专用芯片替代IR2110S 移动储能解决方案
  9. 小白后端工程师成长记——项目规划
  10. JS设置浏览器缩放比例
  11. 来玩个游戏,解锁IT女~
  12. 阿里云内网和公共NTP服务器(网络时间协议-时间同步服务)
  13. Google Earth Engine(GEE)——快速建立一个10km的格网
  14. 【Vue】Antd Affix a-affix 固钉组件,宽度未随父容器宽度变化
  15. MySQL 大表性能优化
  16. Mali GPU OpenGL ES 应用性能优化--基本方法
  17. 免费素材下载:超酷的简单按钮UI
  18. AI批量导出SVG格式图片
  19. 2021年制冷与空调设备安装修理考试题库及制冷与空调设备安装修理考试总结
  20. Python数据可视化 | Python实现Matplotlib系列colorbar的设置

热门文章

  1. 推送通知的跳转处理和消息提醒
  2. 星星之火OIer:对拍
  3. 手把手教你做树莓派魔镜-MagicMirror(六)-安装MagicMirror
  4. Python——组合数据类型的应用_1.英文句子中的词频统计
  5. linux基础知识全面总结,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  6. 密码学基础算法(二)中国剩余定理
  7. 分贝通携手衡石科技,用心护好客户「钱袋子」 增收节流数百万
  8. C语言程序设计教程(第三版)课后习题6.1
  9. 美化微信小程序的界面--微信小程序开发中使用vant的完整步骤
  10. win10分屏快捷键无法使用_Win10分屏操作,再也不用来回切换视图了!