目前我们主要使用python/pyspark在azure数据库中使用一堆笔记本来处理我们的数据。
我们想要实现的是确保我们的集群在启动数据处理之前已经启动(预热)。因此,我们正在探索从databricks笔记本中访问Cluster API的方法。
到目前为止,我们尝试运行以下命令:
import subprocess
cluster_id = "XXXX-XXXXXX-XXXXXXX"
subprocess.run(
[f'databricks clusters start --cluster-id "{cluster_id}"'], shell=True
)
返回下面,之后什么都没有发生。
集群未启动。CompletedProcess(args=['databricks clusters start --cluster-id "0824-153237-ovals313"'], returncode=127)
是否有任何方便和智能的方法从databricks笔记本中调用ClusterAPI,或者调用curl命令,这是如何实现的?
很可能是凭证配置错误。
与其使用命令行应用程序,不如使用集群REST API的Start命令。可以这样做:
import requests
ctx = dbutils.notebook.entry_point.getDbutils().notebook().getContext()
host_name = ctx.tags().get("browserHostName").get()
host_token = "your_PAT_token"
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']