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

DevOps流水线调度Databricks Notebook成功,但另一Notebook单次运行失败求助

问题分析与解决

你的问题出在**jobs/run-now API的参数使用错误**:这个接口的作用是触发已存在的Databricks Job,而非直接传入创建Job的配置。你给body2的结构是创建Job的格式,不符合run-now的要求,导致调用失败。

解决方案:两种可行方式

方式1:先创建notebook2的Job,再触发单次运行

如果需要保留notebook2的Job定义(方便后续再次触发),可以先调用jobs/create创建Job,拿到job_id后再调用run-now:

- task: Bash@3
  displayName: 'Schedule Databricks Notebook'
  inputs:
    targetType: 'inline'
    script: | 
      set -x
      
      databricksUrl='https://adb-13946046.6.azuredatabricks.net/api/2.0'
      notebookPath1='/Users/user/notebook1.py'
      notebookPath2='/Users/user/notebook2.py'
      
      jobName='ScheduledJobName1'
      jobName2='testjob'

      requestUri="$databricksUrl/jobs/create"
      requestUriRun="$databricksUrl/jobs/run-now"

      # 创建notebook1的定时Job
      body='{
        "name": "'$jobName'",
        "new_cluster": {
          "spark_version": "7.0.x",
          "node_type_id": "Standard_DS3_v2",
          "num_workers": 0
        },
        "notebook_task": {
          "notebook_path": "'$notebookPath1'"
        },
        "schedule": {
            "quartz_cron_expression": "45 10 * * * ?",
            "timezone_id": "Canada/Eastern"
        }
      }'

      # 创建notebook2的Job(无定时)
      body2='{
        "name": "'$jobName2'",
        "new_cluster": {
          "spark_version": "7.0.x",
          "node_type_id": "Standard_DS3_v2",
          "num_workers": 0
        },
        "notebook_task": {
          "notebook_path": "'$notebookPath2'"
        }
      }'

      # 创建notebook1的定时Job
      curl -X POST -H "Authorization: Bearer $(token)" -H "Content-Type: application/json" -d "$body" "$requestUri"
      
      # 创建notebook2的Job并提取job_id
      job2_id=$(curl -X POST -H "Authorization: Bearer $(token)" -H "Content-Type: application/json" -d "$body2" "$requestUri" | jq -r '.job_id')
      
      # 触发notebook2的单次运行
      curl -X POST -H "Authorization: Bearer $(token)" -H "Content-Type: application/json" -d '{"job_id": '$job2_id'}' "$requestUriRun"

方式2:直接提交单次运行(无需预创建Job)

如果不需要保留notebook2的Job定义,推荐使用jobs/runs/submit接口,直接提交单次运行任务:

- task: Bash@3
  displayName: 'Schedule Databricks Notebook'
  inputs:
    targetType: 'inline'
    script: | 
      set -x
      
      databricksUrl='https://adb-13946046.6.azuredatabricks.net/api/2.0'
      notebookPath1='/Users/user/notebook1.py'
      notebookPath2='/Users/user/notebook2.py'
      
      jobName='ScheduledJobName1'

      requestUri="$databricksUrl/jobs/create"
      requestUriSubmit="$databricksUrl/jobs/runs/submit"

      # 创建notebook1的定时Job
      body='{
        "name": "'$jobName'",
        "new_cluster": {
          "spark_version": "7.0.x",
          "node_type_id": "Standard_DS3_v2",
          "num_workers": 0
        },
        "notebook_task": {
          "notebook_path": "'$notebookPath1'"
        },
        "schedule": {
            "quartz_cron_expression": "45 10 * * * ?",
            "timezone_id": "Canada/Eastern"
        }
      }'

      # 提交notebook2的单次运行
      body2='{
        "new_cluster": {
          "spark_version": "7.0.x",
          "node_type_id": "Standard_DS3_v2",
          "num_workers": 0
        },
        "notebook_task": {
          "notebook_path": "'$notebookPath2'"
        }
      }'

      # 执行API请求
      curl -X POST -H "Authorization: Bearer $(token)" -H "Content-Type: application/json" -d "$body" "$requestUri"
      curl -X POST -H "Authorization: Bearer $(token)" -H "Content-Type: application/json" -d "$body2" "$requestUriSubmit"

调试补充

  • 脚本开头添加set -x可开启调试模式,查看curl命令的实际执行参数和返回结果
  • 确认$(token)拥有jobs/create、jobs/runs/submit(或jobs/run-now)的权限
  • 可在本地测试curl命令,验证API调用是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:07:34