2. Spark 监控基础:架构、执行流程与监控指标分类
在模型风险管理场景中,Spark 作业通常承担大规模特征工程、模型训练、回测与压力测试等计算任务。理解 Spark 的架构与执行流程,是定位作业异常、配置有效监控指标的前提。本节从三个层面建立监控基础:集群架构、作业执行流程、监控指标分类。
2.1 Spark 集群架构概述
Spark 采用主从(Master-Slave)架构,核心组件包括 Driver、Cluster Manager 和 Executor。在模型风险管理作业中,Driver 负责解析模型计算逻辑并生成 DAG,Executor 负责执行具体的特征计算或模型训练任务。
架构要点: Driver 是作业的“大脑”,Executor 是“肌肉”。监控时需同时关注 Driver 的内存/GC 状态和 Executor 的 Shuffle 与计算负载。
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 应触发告警。
- 作业完成率与延迟:对比基线,判断作业是否出现异常慢节点。
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 天,用于事后根因分析。