当前位置: 首页 > news >正文

Spark作业运行异常慢的问题定位和分析思路

一直很慢 🐢

运行中状态、卡住了,可以从以下两种方式入手:

如果 Spark UI 上,有正在运行的 Job/Stage/Task,看 Executor 相关信息就好。💻

  1. 第一步,如果发现卡住了,直接找到对应的 Executor 页面:
    在这里插入图片描述
  2. 第二步,不断的刷新,看看 Task 线程栈执行的内容是什么:
    在这里插入图片描述

如果 Spark UI 上,没有正在运行的 Job/Stage/Task,看 Driver 相关信息就好。🖥️

  1. 第一选择是看 Driver 的 ThreadDump,分析 Driver 在执行什么逻辑。
    在这里插入图片描述
  2. 第二选择,如果发现 Driver 的线程栈没异常的时候,可以结合 driver 日志查看日志最后的信息是什么。
    在这里插入图片描述

运行结束了 🏁

  1. 首先看看是否有执行时间明显比较长(或者对比历史执行时间比较长)的 Job, Stage:
    • 查看 Jobs 页面,寻找运行耗时相对较长的作业(注意:这里的 Duration 时间是 Job 启动时间和结束时间的耗时,不代表真正的耗时,例如可能存在多个 Job 同时运行,就会出现受资源影响的情况,可能 Duration 比较长,实际真正执行时间比较短的情况):
      在这里插入图片描述
    • 查看 Stages 页面,确定运行时间比较长的 Stage(注意,这里的 Duration 和 Job 的 Duration 是一样的,只代表执行起始时间的跨度,不代表实际执行耗时)
      在这里插入图片描述
    • 查看 Duration 时间比较长的 Stage 的实际执行时间,找到执行时间较长的 Stage:
      在这里插入图片描述
    • 还可以查看所有成功 Task 的执行 Metrics 的直方统计图,以便分析数据倾斜等情况,同时注意 GC 时间的占比,分析是否存在内存问题。
      在这里插入图片描述

注意 ⚠️

上面提到了执行慢可能是 资源问题 也可能是 逻辑或者数据问题,如何确定呢:

  1. 如果上述的 Stage 的详情耗时与历史执行对比,基本一致,那么基本可以判断为资源问题。
  2. 如果直方图中显示的 Task Duration 有可判断为数据倾斜的情况(个别 Task 慢,且输入或输出数据远大于其他 Task),可能是数据倾斜导致的。
  3. 如果并不符合数据倾斜的特征,但是某个节点的 Task 执行都慢,可能是机器负载异常导致。
  4. Spill 指标比较高,可能是内存压力大,spill 至磁盘导致计算变慢,这种情况需要总结和评估是否加内存或者接受稍慢的情况。

比历史慢 🐢

排查步骤:

  1. 首先对比两次执行的 Job 或者 Stage 是否有明显的运行时间区别。
  2. 对比执行逻辑是否有改变(例如 broadcast join 变为 sortmerge join),sql 可以查看执行计划,rdd 可以分区 job 的 dag。
  3. driver 内存压力大,导致调度能力下降(目前可以关注 Driver 的 gc 日志)。
  4. 对比是否有数据量的变动,查看 stage 的输入输出就可以了:
    在这里插入图片描述
  5. 资源的差异,可以查看对应的 stage 的 executor 统计或者队列资源的监控。
  6. 数据倾斜:
    在这里插入图片描述

相关文章:

  • 《骑行健身:“柳叶刀”研究揭示的健康与经济双赢策略》
  • 最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)
  • .Net OpenCVSharp生成灰度图和二值图
  • 【Android面试八股文】sleep、wáit、yield与join的区别,wait 的线程如何唤醒它?
  • 消息队列-Rabbit运行机制
  • 美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!
  • 【做一道算一道】目标和
  • 服务器可以充当负载均衡器
  • 从输入URL到页面加载完中间发生了什么?
  • C# 通过Win32API设置客户端系统时间
  • git Fork或者git clone克隆别人的项目到自己的仓库如何保持原仓库同步
  • flume配置----a1.sources.r1.positionFile=xxxx.json
  • mysql如何创建并执行事件?
  • Mysql union语句
  • Bagging与Boosting的应用与优势
  • CEF与代理
  • docker容器内的网络抓包
  • Hibernate最全面试题
  • java2019面试题北京
  • Java编程基础24——递归练习
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js面向对象
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Meteor的表单提交:Form
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python socket服务器端、客户端传送信息
  • SSH 免密登录
  • 创建一个Struts2项目maven 方式
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端学习笔记之观察者模式
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • $(selector).each()和$.each()的区别
  • (27)4.8 习题课
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (篇九)MySQL常用内置函数
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)jdk与jre的区别
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ***原理与防范
  • .net core + vue 搭建前后端分离的框架
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net web项目 调用webService
  • .NET 发展历程
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET连接数据库方式