集群终止后Spark UI无法显示全部作业,如何留存历史任务或调试?
解决Databricks集群终止后Spark UI仅显示部分历史作业的问题
一、现有配置未生效的原因
你设置的spark.ui.retained*系列参数仅控制Spark运行时UI内存中保留的作业/阶段/任务数量,但集群终止后,本地存储的临时事件日志会被清理,Databricks默认的历史UI依赖这些临时日志,因此无法显示完整历史。另外,即使运行时保留了足够数据,若未配置持久化事件日志,集群终止后数据仍会丢失。
二、留存完整历史作业/阶段/任务的方案
要实现集群终止后仍能查看完整Spark UI历史,必须配置Spark事件日志持久化到外部存储,具体步骤:
- 在集群的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-idspark.eventLog.dir需指定持久化存储路径(如DBFS、S3),DBFS是Databricks默认持久化存储,不会随集群终止删除;your-cluster-or-task-id可替换为集群ID或任务唯一标识,方便后续查找。 - 保留你原有的retained参数,确保运行时采集足够事件:
spark.sql.ui.retainedExecutions 10000 spark.ui.retainedTasks 1000000 spark.ui.retainedStages 10000 spark.ui.retainedJobs 10000 - 重新运行任务后,集群终止时,通过Databricks的Spark History Server(在Workspace的Data Science & Engineering视图中,进入「Spark」→「History」)选择对应存储路径的事件日志,即可查看完整的作业、阶段及任务详情。
三、无法留存完整历史时的调试方案
若因存储限制等原因无法保存完整事件日志,可通过以下方式调试:
- 提前采集关键运行数据:在任务代码中嵌入状态采集逻辑,使用
spark.sparkContext.statusTracker获取作业、阶段的ID、执行状态、耗时等信息,将关键数据写入DBFS的日志文件,方便后续排查。 - 启用作业持久化日志:在作业设置中开启「Logging」选项,将作业标准输出/错误日志持久化到DBFS,日志中会包含阶段执行摘要、错误堆栈等核心信息。
- 导出集群诊断日志:在集群终止前,从集群详情页的「Diagnostics」选项卡导出诊断日志,其中包含Spark事件日志片段、集群资源使用情况、节点状态等数据,可辅助定位问题。
- 拆分大型任务:将包含数千个作业的任务拆分为多个独立的小型作业,每个作业单独运行并保存日志,即使某部分出问题,也能单独查看该作业的完整UI和日志信息。
内容的提问来源于stack exchange,提问作者evyamiz
相关产品推荐
相关产品推荐

