能否通过外部Java API调用Azure Databricks脚本?求按需执行方案
外部Java API调用Azure Databricks脚本的实现方式
完全可以通过外部Java API按需执行Azure Databricks脚本,核心是调用Databricks Jobs API,以下是具体实现步骤:
1. 前置准备
- 获取Azure Databricks工作区的Workspace URL(格式如
https://<region>.azuredatabricks.net) - 创建具有Job执行权限的Personal Access Token (PAT)
- 若脚本已封装为Databricks Job,记录对应的Job ID;若未封装,准备好脚本内容或笔记本路径
2. 两种实现方案
方案一:触发已存在的Databricks Job(Run Now API)
如果脚本已经配置为Databricks Job,直接调用jobs/run-now API触发执行:
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class DatabricksJobTrigger { public static void main(String[] args) throws Exception { String workspaceUrl = "https://<your-region>.azuredatabricks.net"; String token = "dapi-<your-personal-access-token>"; long jobId = 12345; // 替换为你的Job ID HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(workspaceUrl + "/api/2.1/jobs/run-now")) .header("Authorization", "Bearer " + token) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{\"job_id\": " + jobId + "}")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("执行响应: " + response.body()); } }
方案二:直接提交脚本执行(Run Submit API)
如果需要动态指定脚本内容或参数,调用jobs/runs/submit API直接提交任务:
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; public class DatabricksScriptSubmit { public static void main(String[] args) throws Exception { String workspaceUrl = "https://<your-region>.azuredatabricks.net"; String token = "dapi-<your-personal-access-token>"; // 构建请求体,指定脚本类型、内容及集群配置 String requestBody = """ { "run_name": "按需执行脚本", "new_cluster": { "spark_version": "13.3.x-scala2.12", "node_type_id": "Standard_DS3_v2", "num_workers": 1 }, "spark_python_task": { "python_code": "print('Hello from external Java API')" } } """; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(workspaceUrl + "/api/2.1/jobs/runs/submit")) .header("Authorization", "Bearer " + token) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("提交响应: " + response.body()); } }
3. 关键注意事项
- 确保Java程序所在网络能访问Azure Databricks工作区(如通过VPN、VNet对等连接或公网访问)
- PAT需分配足够权限(至少
jobs.create和jobs.runNow权限) - 可通过API返回的
run_id调用jobs/runs/get接口查询执行状态和结果 - 若脚本依赖特定库或配置,需在集群配置中提前设置
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

