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

vlf7wbxs  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(140)

目前,我们正在使用一堆笔记本电脑来处理我们在azure数据库中的数据,主要使用python/pystark。
我们想要实现的是确保我们的集群在启动数据处理之前已经启动(预热)。出于这个原因,我们正在探索从databricks笔记本中访问集群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 notebook中的databricks API或调用curl命令,以及如何实现?

5jdjgkvh

5jdjgkvh1#

最有可能的错误是来自配置不正确的凭据。
与其使用命令行应用程序,不如使用Clusters 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']

相关问题