如何通过ADF重启Databricks工作流并从失败点恢复?
解决ADF调用Databricks工作流时从失败任务重启的问题
直接调用启动新工作流的POST API肯定会从头跑,要实现从失败任务重启,得结合Databricks的重跑指定任务能力和ADF的错误分支来做,具体步骤如下:
关键逻辑
Databricks工作流提供了专门的重跑API,能针对已失败的工作流实例,只重新执行失败的任务(跳过已成功的)。你之前的问题就是用错了API——应该调用重跑接口,而非启动新工作流的接口。
具体操作步骤
1. 在ADF中保存Databricks工作流的运行ID
用ADF的Web活动调用Databricks工作流启动API时,返回结果里会有一个run_id,把这个值存到ADF的变量(比如var_db_run_id)里。启动API的返回示例:
{ "run_id": "1a2b3c4d5e6f", "run_page_url": "https://your-workspace.cloud.databricks.com/...", ... }
2. 配置ADF的错误分支
在执行Databricks工作流的Web活动后面,添加错误分支:
- 错误分支里加一个新的Web活动,用来调用Databricks的重跑失败任务API
- API地址格式:
https://<你的Databricks工作区域名>/api/2.0/jobs/runs/rerun - 请求方法选POST,请求体填:
{ "run_id": "@variables('var_db_run_id')", "rerun_failed_tasks": true } - 别忘了配置认证:用Azure AD令牌或者Databricks个人访问令牌,确保ADF有调用这个API的权限。
3. 验证效果
当Databricks工作流里的任务失败时,ADF会触发错误分支,调用重跑API时因为指定了rerun_failed_tasks: true,Databricks会自动跳过已经成功的任务,只重新执行失败的任务以及依赖它的后续任务。
踩坑提醒
- 别再用
jobs/runs/submit接口了,那是开新工作流的,必须用jobs/runs/rerun才是重跑已有实例的失败任务。 - 确认ADF变量确实存到了正确的
run_id,别传空值或者错的ID。 - 检查权限:用来认证的令牌得有
jobs.runRerun的权限,不然会调用失败。
内容的提问来源于stack exchange,提问作者Ritvik Chauhan
相关产品推荐
相关产品推荐

