如何通过Overwatch获取Databricks作业的内存/vCore资源使用指标
Databricks作业内存、vCore资源信息获取方案
原有查询的问题
你当前直接查询overwatch_etl.spark_events_bronze表的方式无法拿到完整的资源指标:该表是Overwatch采集的原始Spark事件落盘表,字段零散未做维度关联,仅能零散捕获到单Executor上报的MaximumMemory字段,没有作业维度聚合的vCore、总内存分配/使用数据。
正确查询方式
Overwatch已经在silver、gold层做了事件清洗、维度关联和指标聚合,直接查询对应主题表即可,默认表前缀为overwatch_etl,如果部署时自定义过schema,替换成对应名称即可:
- 查作业额定分配资源(即作业运行配置的vCore、内存规格):使用
job_run_gold表,该表已经关联了作业运行绑定的集群规格,直接取聚合好的字段即可
SELECT job_id, run_id, job_name, cluster_id, -- 集群单节点vCore数、单节点内存(单位MB) node_vcore_count, node_memory_mb, -- 作业总分配vCore、Executor总内存、Driver内存 total_executor_cores AS allocated_total_vcores, total_executor_memory_mb AS allocated_total_executor_memory_mb, driver_memory_mb AS allocated_driver_memory_mb, run_start_time, run_end_time FROM overwatch_etl.job_run_gold WHERE job_id IS NOT NULL LIMIT 100
- 查作业实际运行资源使用率(即运行过程中真实消耗的vCore、内存):使用
cluster_resource_consumption_silver表,和作业运行表按集群ID、时间窗口关联即可拿到对应作业的时序资源消耗数据
SELECT j.job_id, j.run_id, j.job_name, c.cluster_id, date_trunc('minute', c.event_time) AS metric_time, -- 时间窗口内vCore使用均值、峰值 AVG(c.vcore_used) AS avg_used_vcores, MAX(c.vcore_used) AS peak_used_vcores, -- 时间窗口内内存使用均值、峰值(单位MB) AVG(c.memory_used_mb) AS avg_used_memory_mb, MAX(c.memory_used_mb) AS peak_used_memory_mb FROM overwatch_etl.cluster_resource_consumption_silver c INNER JOIN overwatch_etl.job_run_gold j ON c.cluster_id = j.cluster_id AND c.event_time BETWEEN j.run_start_time AND j.run_end_time WHERE j.job_id IS NOT NULL GROUP BY 1,2,3,4,5 ORDER BY metric_time DESC LIMIT 1000
注意:如果坚持要从bronze层原始表计算,需要自行关联
SparkListenerJobStart、SparkListenerExecutorAdded、SparkListenerClusterSpec等多类事件,手动拼接作业和集群资源的映射关系,逻辑冗余且容易出现匹配错误,不推荐使用。
内容的提问来源于stack exchange,提问作者BruceWayne
相关产品推荐
相关产品推荐

