如何在Databricks中获取运行中的非笔记本类型作业的名称
Databricks 获取运行中非笔记本作业名称并推送Slack通知实现方案
前置依赖
- 你需要有Databricks工作区的作业创建/编辑权限,以及对应工作区的API访问权限
- 提前配置好Slack的入站Webhook,拿到Webhook地址备用
核心实现方案
你不需要额外扫描全量运行作业,Databricks运行作业时会默认注入内置环境变量,直接在作业的启动逻辑中读取对应变量即可拿到当前作业信息,是实现启动主动通知的最优方案。如果需要在作业外部批量拉取所有符合条件的作业,调用官方Jobs API即可。
方案1:通过内置环境变量获取(适配作业启动主动推送场景)
Databricks运行作业时会自动注入以下环境变量,无需额外配置即可直接读取:
DATABRICKS_JOB_NAME:当前运行作业的完整名称DATABRICKS_JOB_RUN_ID:当前作业运行实例的ID,可用来补充更多运行维度信息DATABRICKS_JOB_TYPE:作业类型,非笔记本类型作业会返回PYTHON_TASK、JAR_TASK、DBSQL_TASK等取值,可通过该字段过滤掉笔记本类型作业
Python类型作业示例代码
import os import requests # 读取当前作业环境变量 job_name = os.getenv("DATABRICKS_JOB_NAME", "未知作业") job_type = os.getenv("DATABRICKS_JOB_TYPE", "") run_id = os.getenv("DATABRICKS_JOB_RUN_ID", "未知运行ID") # 过滤非笔记本类型作业后推送Slack if job_type != "NOTEBOOK_TASK": slack_webhook = "替换为你的Slack入站Webhook地址" message = { "text": f"Databricks作业已启动\n作业名称:{job_name}\n运行ID:{run_id}\n作业类型:{job_type}" } requests.post(slack_webhook, json=message)
Shell类型作业示例代码
# 读取环境变量 JOB_NAME=$DATABRICKS_JOB_NAME JOB_TYPE=$DATABRICKS_JOB_TYPE RUN_ID=$DATABRICKS_JOB_RUN_ID # 过滤非笔记本作业并推送Slack if [ "$JOB_TYPE" != "NOTEBOOK_TASK" ]; then curl -X POST -H 'Content-type: application/json' --data '{"text":"Databricks作业已启动\n作业名称:'"$JOB_NAME"'\n运行ID:'"$RUN_ID"'\n作业类型:'"$JOB_TYPE"'"}' 替换为你的Slack入站Webhook地址 fi
方案2:调用Jobs API批量拉取(适配外部统一查询场景)
如果需要在作业外部统一拉取所有正在运行的非笔记本作业名称,调用2.1/jobs/runs/list接口即可,示例代码如下:
import requests DATABRICKS_WORKSPACE_URL = "替换为你的Databricks工作区地址" DATABRICKS_TOKEN = "替换为你的Databricks个人访问令牌" headers = { "Authorization": f"Bearer {DATABRICKS_TOKEN}", "Content-Type": "application/json" } # 拉取所有运行中的作业 response = requests.get( f"{DATABRICKS_WORKSPACE_URL}/api/2.1/jobs/runs/list", headers=headers, params={"active_only": "true"} ) running_jobs = response.json().get("runs", []) # 过滤非笔记本类型作业,取出作业名 non_notebook_job_names = [] for job in running_jobs: task_type = job.get("tasks", [{}])[0].get("task_type", "") if task_type != "NOTEBOOK": non_notebook_job_names.append(job.get("job_name", "未知作业")) # non_notebook_job_names即为所有运行中的非笔记本作业名称列表
如果你要实现作业启动自动推送通知,优先使用方案1,把推送逻辑加到作业的启动步骤最前面即可,无需额外部署服务,实时性和稳定性更高。
内容的提问来源于stack exchange,提问作者Borislav Blagoev
相关产品推荐
相关产品推荐

