You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集群终止后Spark UI无法显示全部作业,如何留存历史任务或调试?

解决Databricks集群终止后Spark UI仅显示部分历史作业的问题

一、现有配置未生效的原因

你设置的spark.ui.retained*系列参数仅控制Spark运行时UI内存中保留的作业/阶段/任务数量,但集群终止后,本地存储的临时事件日志会被清理,Databricks默认的历史UI依赖这些临时日志,因此无法显示完整历史。另外,即使运行时保留了足够数据,若未配置持久化事件日志,集群终止后数据仍会丢失。

二、留存完整历史作业/阶段/任务的方案

要实现集群终止后仍能查看完整Spark UI历史,必须配置Spark事件日志持久化到外部存储,具体步骤:

  1. 在集群的Spark配置中添加事件日志持久化参数:
    spark.eventLog.enabled true
    spark.eventLog.dir dbfs:/databricks/spark/eventlogs/your-cluster-or-task-id
    spark.history.fs.logDirectory dbfs:/databricks/spark/eventlogs/your-cluster-or-task-id
    
    注:spark.eventLog.dir需指定持久化存储路径(如DBFS、S3),DBFS是Databricks默认持久化存储,不会随集群终止删除;your-cluster-or-task-id可替换为集群ID或任务唯一标识,方便后续查找。
  2. 保留你原有的retained参数,确保运行时采集足够事件:
    spark.sql.ui.retainedExecutions 10000
    spark.ui.retainedTasks 1000000
    spark.ui.retainedStages 10000
    spark.ui.retainedJobs 10000
    
  3. 重新运行任务后,集群终止时,通过Databricks的Spark History Server(在Workspace的Data Science & Engineering视图中,进入「Spark」→「History」)选择对应存储路径的事件日志,即可查看完整的作业、阶段及任务详情。

三、无法留存完整历史时的调试方案

若因存储限制等原因无法保存完整事件日志,可通过以下方式调试:

  • 提前采集关键运行数据:在任务代码中嵌入状态采集逻辑,使用spark.sparkContext.statusTracker获取作业、阶段的ID、执行状态、耗时等信息,将关键数据写入DBFS的日志文件,方便后续排查。
  • 启用作业持久化日志:在作业设置中开启「Logging」选项,将作业标准输出/错误日志持久化到DBFS,日志中会包含阶段执行摘要、错误堆栈等核心信息。
  • 导出集群诊断日志:在集群终止前,从集群详情页的「Diagnostics」选项卡导出诊断日志,其中包含Spark事件日志片段、集群资源使用情况、节点状态等数据,可辅助定位问题。
  • 拆分大型任务:将包含数千个作业的任务拆分为多个独立的小型作业,每个作业单独运行并保存日志,即使某部分出问题,也能单独查看该作业的完整UI和日志信息。

内容的提问来源于stack exchange,提问作者evyamiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:25:10