Databricks作业运行失败后如何从断点续跑而无需重新执行所有前置命令
Databricks作业断点续跑实现方案
适用前置条件
你已手动创建缺失的目标存储文件夹,原失败原因已排除。
方法1:多任务作业直接重跑失败任务(最优方案,适用于作业已拆分为多独立任务的场景)
如果你的作业按逻辑拆分为了多个独立任务(前置计算任务、末尾结果写入任务为不同的任务节点),操作如下:
- 进入对应作业的失败运行详情页
- 点击右上角
重新运行下拉选项,选择重新运行失败的任务 - Databricks会自动跳过所有已执行成功的上游任务,直接从失败的写入任务开始执行
方法2:单Notebook多命令场景的断点实现
如果你的所有作业逻辑都写在同一个Notebook内,可通过以下两种方式实现:
方式A:代码加执行状态标记(适合生产作业常态化配置)
在代码中增加执行状态持久化逻辑,每次运行自动跳过已完成的步骤:
- 为每个逻辑步骤配置唯一的状态标记,步骤执行成功后将标记写入DBFS或指定存储路径:
# 示例:步骤1执行完成后写入成功标记 dbutils.fs.put("/your_custom_path/job_marks/step_calc_success", "", overwrite=True)
- 每个步骤执行前先判断对应标记是否存在,存在则直接跳过:
try: dbutils.fs.ls("/your_custom_path/job_marks/step_calc_success") except: # 标记不存在时执行对应步骤逻辑 your_calculation_logic() # 执行完成写入成功标记 dbutils.fs.put("/your_custom_path/job_marks/step_calc_success", "", overwrite=True)
- 问题修复后重新运行整个Notebook即可,已完成的步骤会自动跳过,直接运行到之前失败的写入步骤。
方式B:手动指定起始执行位置(适合临时一次性重跑)
如果不需要长期配置断点逻辑,仅本次临时重跑,可直接操作:
- 打开作业对应的Notebook,确认集群未被释放、前面步骤的执行结果和中间缓存未丢失
- 找到失败的写入命令的前一个命令,点击该命令右侧的
运行以下所有按钮,即可直接执行该命令之后的所有内容,无需重跑前面已成功的步骤。
注意事项
- 如果作业运行的集群已经被关停,内存中缓存的中间计算结果会被清空,该场景下无法断点续跑,只能重新执行全部计算逻辑
- 状态标记文件不要存放在系统临时目录下,避免被自动清理导致状态丢失
内容的提问来源于stack exchange,提问作者aykcandem
相关产品推荐
相关产品推荐

