如何调用 Cluster API 并从 Databricks Notebook 中启动集群?

How to call Cluster API and start cluster from within Databricks Notebook?

目前我们正在使用一堆笔记本来处理 azure databricks 中的数据,主要使用 python/pyspark。

我们想要实现的是确保我们的集群在启动数据处理之前已经启动(预热)。出于这个原因,我们正在探索从数据块笔记本中访问集群 API 的方法。

到目前为止,我们尝试了运行以下方法:

import subprocess
cluster_id = "XXXX-XXXXXX-XXXXXXX"
subprocess.run(
    [f'databricks clusters start --cluster-id "{cluster_id}"'], shell=True
)

然而 returns 下面并没有真正发生之后。集群未启动。

CompletedProcess(args=['databricks clusters start --cluster-id "0824-153237-ovals313"'], returncode=127)

是否有任何方便和智能的方法来从 databricks notebook 中调用集群API 或者调用 curl 命令,这是如何实现的?

错误很可能来自错误配置的凭据。

与其使用命令行应用程序,不如使用 Start command of Clusters REST API。这可以通过这样的方式完成:

import requests
ctx = dbutils.notebook.entry_point.getDbutils().notebook().getContext()
host_name = ctx.tags().get("browserHostName").get()
host_token = ctx.apiToken().get()
cluster_id = "some_id" # put your cluster ID here

requests.post(
    f'https://{host_name}/api/2.0/clusters/get',
    json = {'cluster_id': cluster_id},
    headers={'Authorization': f'Bearer {host_token}'}
  )

然后您可以使用 Get 端点监视状态,直到它进入 RUNNING 状态:

response = requests.get(
    f'https://{host_name}/api/2.0/clusters/get?cluster_id={cluster_id}',
    headers={'Authorization': f'Bearer {host_token}'}
  ).json()
status = response['state']