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

如何在Databricks Notebook中调用Cluster API启动集群

返回码127属于shell命令未找到的系统错误,出现该问题的原因是当前运行代码的Databricks集群节点未预装Databricks CLI,因此subprocess调用命令失败。

最优实现方案:直接调用Databricks REST API(无需额外依赖)

这个方案不需要安装任何第三方工具,利用Databricks Runtime默认预装的requests库即可实现,还支持自动等待集群预热完成:

import requests
import time

# 自动获取当前工作区的API地址和访问令牌,无需硬编码
api_url = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()
api_token = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()
headers = {"Authorization": f"Bearer {api_token}"}

# 替换为目标集群ID
cluster_id = "XXXX-XXXXXX-XXXXXXX"

# 调用启动集群接口
start_resp = requests.post(
    f"{api_url}/api/2.0/clusters/start",
    headers=headers,
    json={"cluster_id": cluster_id}
)
start_resp.raise_for_status()
print("已触发集群启动,等待预热完成...")

# 轮询检查集群状态,直到启动完成
while True:
    get_resp = requests.get(
        f"{api_url}/api/2.0/clusters/get",
        headers=headers,
        json={"cluster_id": cluster_id}
    )
    get_resp.raise_for_status()
    cluster_state = get_resp.json()["state"]
    if cluster_state == "RUNNING":
        print("集群已完成启动预热,可开始执行数据处理任务")
        break
    elif cluster_state in ["TERMINATED", "TERMINATING", "ERROR"]:
        raise Exception(f"集群启动失败,当前状态:{cluster_state}")
    # 每30秒查询一次,避免触发API限流
    time.sleep(30)
可选方案:使用curl命令调用

如果偏好使用shell命令,可以用notebook的%sh魔法命令结合curl实现:

%sh
# 替换为实际的工作区地址、API令牌和集群ID
API_URL="https://<你的工作区地址>.azuredatabricks.net"
API_TOKEN="<你的API令牌>"
CLUSTER_ID="XXXX-XXXXXX-XXXXXXX"

# 触发集群启动
curl -X POST \
  "${API_URL}/api/2.0/clusters/start" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -d '{"cluster_id": "'${CLUSTER_ID}'"}'
注意事项
  • 运行上述代码的账号需要对目标集群持有CAN_MANAGE权限,否则会返回403权限不足错误。
  • 上述代码默认操作的是当前工作区的集群,如果需要操作其他工作区的集群,手动替换api_url和api_token为对应工作区的信息即可。
  • 轮询间隔建议不低于10秒,避免触发Databricks API的限流规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:39:03