如何提取Databricks失败作业运行中的报错信息?
解决方案
1. 使用Jobs Runs Get Output API提取Notebook报错
调用/api/2.1/jobs/runs/get-output接口并传入目标run_id,这个接口会返回Notebook任务的执行输出,包含具体错误信息。
示例curl调用:
curl -X GET -n \ https://<databricks-instance>/api/2.1/jobs/runs/get-output?run_id=<your-run-id>
作业失败时,响应里的error字段下,message或details子字段会包含AnalysisException:这类具体异常内容;如果是Notebook输出的结构化错误,还可查看notebook_output下的子结构提取详情。
2. 通过Jobs Runs Get Logs API获取运行日志
使用/api/2.1/jobs/runs/get-logs接口获取作业的标准错误流(stderr),Notebook中的运行时异常通常会输出到这里。
示例curl调用:
curl -X GET -n \ https://<databricks-instance>/api/2.1/jobs/runs/get-logs?run_id=<your-run-id>&log_type=stderr
返回的纯文本日志可通过字符串匹配(比如过滤包含AnalysisException:的行)提取报错信息,日志量大时需处理offset和limit分页参数。
3. 查询Databricks系统表获取报错详情
Databricks的系统表system.jobs.job_runs和system.jobs.run_details中,error_message字段直接存储了作业失败的详细原因,包括Notebook中的异常。
用Spark SQL查询后可直接转为DataFrame供Tableau使用:
SELECT run_id, job_id, error_message, start_time, end_time FROM system.jobs.job_runs WHERE run_result = 'FAILED'
查询结果可写入Tableau可访问的数据源(如Delta Lake、S3等)。
注意事项
- 确保操作账号拥有
jobs.get、jobs.getOutput、jobs.getLogs权限,以及系统表的读取权限。 - 若Notebook中是自定义抛出的异常,需确保异常信息输出到stderr,否则无法被API捕获。
- 解析报错文本时,可使用字符串处理函数(如Python的
re.findall、Spark SQL的regexp_extract)精准提取AnalysisException:后的具体内容。
内容的提问来源于stack exchange,提问作者user8178045
相关产品推荐
相关产品推荐

