You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s 1.22环境升级Spark Operator至1.3.3后jmx_exporter启动失败

问题根因

Spark Operator 1.3.x 版本新增了JMX Prometheus监控自动注入逻辑,默认会给所有提交的Spark应用的Driver、Executor注入jmx_prometheus_javaagent启动参数,参数中硬编码指定配置文件路径为/etc/metrics/conf/prometheus.yaml。
1.2.x版本不存在该自动注入逻辑,因此原有手动指定jmx_exporter_0.15路径的配置可以正常运行。升级到1.3.3后,自动注入的agent参数会优先加载,但未提前将对应prometheus配置文件挂载到Pod的指定路径,直接触发FileNotFoundException导致JVM启动失败。

解决方案

根据是否需要使用Operator自带的JMX监控能力二选一即可:

方案1:关闭自动注入的JMX监控(最快恢复,兼容原有配置)

不需要使用Operator自动配置的监控能力时,直接关闭自动注入开关,原有手动指定jmx_exporter路径的逻辑不受影响:

  • 全局关闭(对所有应用生效):如果通过Helm部署Spark Operator,修改values.yaml配置:
metrics:
  enablePrometheusAgent: false

执行Helm升级后重启Operator,新提交的应用不会再自动注入jmx agent参数。

  • 单应用关闭(仅对指定Spark应用生效):在对应SparkApplication CR的spec.sparkConf字段下添加配置:
sparkConf:
  spark.jmx.prometheus.enabled: "false"

重新提交应用即可恢复正常启动。

方案2:保留自动JMX监控能力

需要使用Operator自带的监控采集能力时,补全配置文件挂载即可:

  1. 准备jmx exporter所需的prometheus.yaml配置文件,最小可用配置示例:
rules:
  - pattern: ".*"
  1. 将该配置文件创建为K8s ConfigMap:
kubectl create configmap spark-jmx-exporter-config --from-file=prometheus.yaml=./prometheus.yaml -n <Spark应用所在命名空间>
  1. 修改SparkApplication CR配置,为Driver和Executor都添加ConfigMap卷挂载,将上述ConfigMap挂载到/etc/metrics/conf路径下,挂载示例:
spec:
  volumes:
    - name: jmx-exporter-config
      configMap:
        name: spark-jmx-exporter-config
  driver:
    volumeMounts:
      - name: jmx-exporter-config
        mountPath: /etc/metrics/conf
  executor:
    volumeMounts:
      - name: jmx-exporter-config
        mountPath: /etc/metrics/conf

重新提交应用后,自动注入的jmx agent即可正常读取配置文件启动。

注意:选择该方案时建议移除之前手动指定的jmx_exporter_0.15路径配置,避免出现重复加载javaagent的冲突。

内容的提问来源于stack exchange,提问作者Ivan Melnyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:25:34