2. Spark 监控基础:架构、执行流程与监控指标分类

在模型风险管理场景中,Spark 作业通常承担大规模特征工程、模型训练、回测与压力测试等计算任务。理解 Spark 的架构与执行流程,是定位作业异常、配置有效监控指标的前提。本节从三个层面建立监控基础:集群架构、作业执行流程、监控指标分类。

2.1 Spark 集群架构概述

Spark 采用主从(Master-Slave)架构,核心组件包括 Driver、Cluster Manager 和 Executor。在模型风险管理作业中,Driver 负责解析模型计算逻辑并生成 DAG,Executor 负责执行具体的特征计算或模型训练任务。

架构要点: Driver 是作业的“大脑”,Executor 是“肌肉”。监控时需同时关注 Driver 的内存/GC 状态和 Executor 的 Shuffle 与计算负载。
Spark 集群核心架构 Driver DAG 调度器 · Task 调度器 Cluster Manager Executor 1 任务线程 · 缓存 · Shuffle Executor 2 任务线程 · 缓存 · Shuffle Executor N 任务线程 · 缓存 · Shuffle HDFS / Hive Kafka / 特征库 Driver 解析模型 DAG → Cluster Manager 分配资源 → Executor 执行特征计算与模型训练

2.2 Spark 作业执行流程

一个模型风险管理 Spark 作业从提交到完成,经历以下关键阶段。每个阶段都可能成为监控盲点或异常爆发点。

阶段 核心动作 监控关注点
1. 作业提交 spark-submit 将模型代码与配置提交至集群 提交参数(executor-memory、cores)是否合理
2. DAG 构建 Driver 根据 RDD/DataFrame 算子构建有向无环图 Stage 切分是否过多、宽依赖是否集中
3. Task 调度 TaskScheduler 将 Task 分发至各 Executor Task 倾斜、数据本地性级别
4. 任务执行 Executor 执行计算、Shuffle 写/读、缓存 GC 时间、Shuffle 溢出、内存压力
5. 结果收集 Driver 收集结果或写入外部存储 Driver 端 OOM、结果序列化开销
模型风险场景提示: 在回测作业中,DAG 构建阶段如果出现大量宽依赖(如 groupBy 后 join 大表),容易导致 Stage 数激增,Shuffle 数据量膨胀,进而触发 Executor 内存溢出。监控时应重点观察 spark.sql.shuffle.partitions 与 Shuffle 读写量。

2.3 Spark 监控指标分类

为有效排查模型风险管理作业的异常,监控指标应覆盖以下四个维度。每个维度对应不同的异常模式。

2.3.1 资源与调度指标

  • vcore 使用率 / 分配率:反映集群资源是否被充分利用或存在资源碎片。
  • Executor 数量与状态:活跃、失败、黑名单 Executor 数量。
  • 任务等待时间:Task 在调度队列中的等待时长,过长表明资源不足或调度瓶颈。

2.3.2 计算与 Shuffle 指标

  • Shuffle 读/写字节数:宽依赖作业的核心监控项,异常突增通常预示数据倾斜或分区不合理。
  • Shuffle 溢出磁盘量:内存不足时 Shuffle 数据溢写到磁盘,严重影响性能。
  • GC 时间占比:Executor 或 Driver 的 GC 时间超过 10% 时需警惕内存压力。

2.3.3 I/O 与存储指标

  • HDFS 读写吞吐:模型训练时频繁读取特征数据,需监控 NameNode 与 DataNode 负载。
  • 缓存命中率:使用 .cache() 或 .persist() 后的缓存有效性。
  • 数据本地性级别:PROCESS_LOCAL > NODE_LOCAL > RACK_LOCAL > ANY,级别越低网络开销越大。

2.3.4 作业进度与异常指标

  • Stage 持续时间:单个 Stage 耗时过长往往是数据倾斜或计算瓶颈的信号。
  • Task 失败率 / 重试次数:超过 3 次重试的 Task 应触发告警。
  • 作业完成率与延迟:对比基线,判断作业是否出现异常慢节点。
Spark 监控指标分类体系 Spark 监控指标 资源与调度 vcore · Executor · 等待 计算与 Shuffle Shuffle · GC · 溢出 I/O 与存储 HDFS · 缓存 · 本地性 作业进度与异常 Stage · 失败率 · 延迟 vcore 使用率 · 黑名单 Shuffle 读写 · GC 占比 HDFS 吞吐 · 缓存命中 Stage 耗时 · 重试次数 四类指标覆盖模型风险管理作业的完整监控视图,每类对应不同的异常排查入口

2.4 监控指标与模型风险场景的映射

在模型风险管理中,不同异常场景需要优先关注不同的指标组合。下表给出常见场景与对应监控指标的映射关系。

模型风险场景 典型表现 优先监控指标
特征工程数据倾斜 部分 Task 运行极慢,其他 Task 空闲 Shuffle 读/写字节数、Task 持续时间分布
回测作业内存溢出 Executor 频繁 OOM,GC 时间 > 20% GC 时间占比、Shuffle 溢出磁盘量、Executor 内存使用率
模型训练资源争抢 作业等待时间长,vcore 分配率低 任务等待时间、vcore 使用率、Executor 黑名单数
特征读取 I/O 瓶颈 HDFS 读吞吐骤降,数据本地性降级 HDFS 读写吞吐、数据本地性级别、缓存命中率
常见误区: 只关注 CPU 和内存指标,忽略 Shuffle 和 GC 指标。在模型风险管理作业中,Shuffle 异常是导致作业失败的首要原因之一。建议在 Spark UI 的 Stages 页面中,将 Shuffle Read/Write 列加入默认显示。

2.5 监控数据采集方式

Spark 提供多种监控数据采集途径,模型风险管理团队应根据环境选择合适的方式:

  • Spark Web UI:内置的作业级监控界面,提供 Stages、Storage、Environment、Executors 等标签页,适合人工排查。
  • Spark 历史服务器(History Server):持久化 event log,支持离线分析已完成的作业。
  • Metrics 系统:通过 metrics.properties 配置,将指标输出到 Ganglia、Graphite、Prometheus 等外部系统。
  • REST API:Spark 提供 /applications、/stages 等 REST 端点,适合自动化监控平台集成。
推荐实践: 在模型风险管理平台中,优先使用 Prometheus + Grafana 采集 Spark Metrics,并针对 Shuffle 溢出量、GC 时间、Task 失败率设置告警阈值。同时保留 History Server 的 event log 至少 30 天,用于事后根因分析。