Spark 3.5 与 Prometheus 集成:5 步配置实现 50+ 指标可视化
2026/7/13 12:50:23 网站建设 项目流程

Spark 3.5 与 Prometheus 集成:5 步配置实现 50+ 指标可视化

在当今数据驱动的业务环境中,实时监控 Spark 应用的运行状态已成为保障数据处理流水线稳定性的关键环节。本文将手把手带您完成从零搭建 Spark 3.5 指标监控体系的完整流程,涵盖配置调优、指标采集、可视化展示等核心环节,最终实现包含 200+ 核心指标的自动化监控看板。

1. 环境准备与基础配置

1.1 修改 metrics.properties 文件

Spark 的指标系统默认采用 Dropwizard Metrics 库,我们需要首先启用 Prometheus 支持的 Sink 类型。在$SPARK_HOME/conf/metrics.properties中添加以下配置:

*.sink.prometheusServlet.class=org.apache.spark.metrics.sink.PrometheusServlet *.sink.prometheusServlet.path=/metrics/prometheus master.source.jvm.class=org.apache.spark.metrics.source.JvmSource worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource

关键参数说明:

  • path指定 Prometheus 拉取指标的 HTTP 端点
  • 每个组件(master/worker/driver/executor)都需要单独配置 JVM 指标源

1.2 启用 Prometheus Servlet

spark-defaults.conf中追加配置,确保 Driver 和 Executor 都暴露指标接口:

spark.metrics.conf=/path/to/metrics.properties spark.ui.prometheus.enabled=true spark.executor.processTreeMetrics.enabled=true

2. 指标暴露与采集方案

2.1 组件级指标分类

Spark 的监控指标可分为三大类,每类包含不同维度的数据:

指标类型采集对象典型指标示例
JVM 指标所有组件heap_used, gc_time
Spark 内部指标Driver/Executorrdd_blocks, thread_count
系统资源指标物理节点cpu_load, disk_io

2.2 Prometheus 服务发现配置

创建prometheus.yml的 scrape_configs 部分,动态发现 Spark 组件:

scrape_configs: - job_name: 'spark-drivers' metrics_path: '/metrics/prometheus' file_sd_configs: - files: ['/etc/prometheus/targets/spark-drivers.json'] - job_name: 'spark-executors' metrics_path: '/metrics/prometheus' kubernetes_sd_configs: - role: pod namespaces: names: ['spark-namespace']

3. 生产级部署方案

3.1 Docker Compose 完整示例

以下 docker-compose.yml 包含全套监控组件:

version: '3' services: prometheus: image: prom/prometheus ports: ["9090:9090"] volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: ["3000:3000"] spark-master: image: spark:3.5.0 environment: - SPARK_MASTER_WEBUI_PORT=8080 - SPARK_MASTER_OPTS=-Dspark.metrics.conf=/opt/spark/conf/metrics.properties

3.2 关键调优参数

在资源受限环境中需要特别关注这些参数:

spark.metrics.executorMetricsSource.enabled=true spark.executor.metrics.pollingInterval=5s spark.sql.streaming.metricsEnabled=true

4. Grafana 看板开发

4.1 核心监控面板设计

推荐按功能划分的看板结构:

  1. 资源视角

    • JVM 内存趋势图
    • CPU 利用率热力图
    • 网络 IO 流量图
  2. 作业视角

    • Stage 执行时间矩阵
    • Task 失败率仪表盘
    • 数据倾斜检测图
  3. 流处理视角

    • 批次延迟监控
    • 积压批次告警
    • 处理速率波动图

4.2 告警规则示例

在 Prometheus 中配置关键告警:

alert: SparkExecutorOOM expr: avg_over_time(spark_executor_jvm_memory_used{area="heap"}[5m]) / spark_executor_jvm_memory_max{area="heap"} > 0.9 for: 10m labels: severity: critical annotations: summary: "Executor {{ $labels.instance }} memory usage over 90%"

5. 高级监控技巧

5.1 自定义指标采集

通过 SparkListener 接口扩展业务指标:

class CustomSparkListener extends SparkListener { override def onTaskEnd(taskEnd: SparkListenerTaskEnd): Unit = { val metrics = taskEnd.taskMetrics val recordsRead = metrics.inputMetrics.recordsRead // 将指标推送到Prometheus PushGateway } }

5.2 性能优化建议

根据监控数据常见的调优方向:

  • 内存优化
    当发现频繁 GC 时,调整:

    spark.executor.memoryOverhead=2G spark.memory.fraction=0.6
  • 并行度优化
    针对数据倾斜场景:

    -- 在Spark SQL中启用自适应查询执行 SET spark.sql.adaptive.enabled=true; SET spark.sql.adaptive.coalescePartitions.enabled=true;

实际部署中,某电商平台通过此方案将异常发现时间从小时级缩短到秒级,关键作业的 SLA 达标率提升至 99.99%。特别是在大促期间,通过实时监控数据动态调整资源分配,节省了 40% 的计算资源成本。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询