You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Prometheus JMX Exporter获取Spark2集群指标失败求助

问题分析与修正方案

首先看你cluster模式的提交命令,存在几个关键问题,导致Prometheus无法采集到指标:

1. 配置项格式错误

你把多个Spark配置项塞到了同一个--conf参数里,而且没有正确分隔,Spark无法正确解析这些配置。每个spark.*配置应该单独使用--conf参数,或者在同一个--conf里用**分号(Linux/macOS环境)**分隔不同的配置项。

2. 文件路径与分发问题

  • 在cluster模式下,Driver会在集群的某个节点上启动,你指定的绝对路径/jars//conf/在集群节点上不一定存在,路径解析会出错。
  • --files参数应该用来分发你的spark.yml配置文件,而不是jmx agent的jar包——spark.jars已经会自动把指定的jar包分发到所有Driver和Executor节点的classpath中。
  • 当用--files上传文件后,在Driver和Executor的运行目录中,这些文件是直接放在当前工作目录下的,所以路径应该用相对路径./spark.yml,而不是绝对路径。

3. Executor端口冲突风险

你给所有Executor指定了固定的8061端口,如果同一个节点上启动多个Executor,会出现端口占用冲突的问题,建议使用动态端口(比如=0:./spark.yml,让系统自动分配可用端口),或者指定一个端口范围。


修正后的提交命令

./spark-submit --supervise \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-javaagent:./jmx_prometheus_javaagent-0.12.0.jar=8060:./spark.yml" \
--conf "spark.executor.extraJavaOptions=-javaagent:./jmx_prometheus_javaagent-0.12.0.jar=0:./spark.yml" \
--conf "spark.jars=./jars/jmx_prometheus_javaagent-0.12.0.jar" \
--files ./conf/spark.yml \
--class org.apache.spark.examples.SparkTC \
--master spark://host1:7077,host2:7077 \
--executor-memory 1G \
--total-executor-cores 1 \
./spark/spark-2.4.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.0.jar 1

额外注意事项

  • 端口可达性:确保Prometheus所在的机器能访问到集群中Driver节点的8060端口,以及所有Executor节点的动态分配端口(如果需要采集Executor指标的话)。
  • 日志排查:如果还是不行,可以查看Driver和Executor的日志(通过Spark UI或者集群节点的日志目录),看是否有jmx agent加载失败的报错,比如找不到jar包或者配置文件的错误信息。
  • 版本兼容性:确认jmx_prometheus_javaagent-0.12.0.jar和Spark 2.4.0的Java版本兼容(Spark 2.4.x一般适配Java 8,agent也需对应版本编译)。

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

火山引擎 最新活动