如何用Prometheus监控Apache Spark?新手实操步骤咨询
嗨,作为刚接触Spark的新手,要把Prometheus和Spark整合起来确实容易摸不着头脑,我来给你一步步拆解清楚,保证你能跟着做下来~
用Prometheus监控Apache Spark的分步指南
1. 先配置metrics.properties文件
Spark的指标系统基于Dropwizard,要对接Prometheus,首先得修改(或新建)这个配置文件:
- 找到Spark的配置目录(一般是
$SPARK_HOME/conf),如果没有metrics.properties就新建一个 - 写入以下配置内容:
# 全局配置,对Driver和Executor都生效 *.sink.prometheus.class=org.apache.spark.metrics.sink.PrometheusSink *.sink.prometheus.port=9104 # 自定义端口,只要和其他服务不冲突就行 *.sink.prometheus.period=10 # 指标上报间隔,单位是秒
如果想单独给Driver或Executor配置不同参数,也可以拆分写:
# 仅Driver生效 driver.sink.prometheus.port=9104 # 仅Executor生效 executor.sink.prometheus.port=9105
2. 添加Prometheus Sink的依赖
Spark默认没打包这个Sink,所以得把对应的jar包加到Spark的Classpath里,有两种常用方式:
- 方式一:本地jar包放入Spark目录
下载和你的Spark版本匹配的spark-prometheus_*.jar,放到$SPARK_HOME/jars目录下即可。 - 方式二:启动应用时指定依赖
用spark-submit提交应用时,通过--jars参数指定jar包路径:
spark-submit --jars /path/to/spark-prometheus-3.3.0.jar your-spark-application.jar
如果是用Maven/Gradle构建应用,也可以在项目依赖里添加:
Maven示例:
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_dropwizard</artifactId> <version>0.16.0</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-prometheus_2.12</artifactId> <version>3.3.0</version> <scope>provided</scope> </dependency>
3. 启动应用并验证配置
- 启动Spark应用后,访问
http://<driver-ip>:9104/metrics(端口是你刚才配置的),如果能看到一堆Prometheus格式的指标文本,说明配置成功了。 - 接下来在Prometheus的配置文件
prometheus.yml里添加Spark的监控目标:
scrape_configs: - job_name: 'spark_monitor' static_configs: - targets: ['<driver-ip>:9104', '<executor-ip>:9104'] # 把所有Driver和Executor的IP加进来
重启Prometheus后,就能在Prometheus UI里看到Spark的指标了,之后还可以导入Grafana的Spark仪表盘模板(比如ID 12836)来可视化数据。
4. 关于是否需要修改应用代码?
- 如果只是监控Spark自带的指标(比如任务进度、内存/CPU占用、作业延迟这些),完全不需要修改代码,上面的配置就足够了。
- 如果需要监控自定义业务指标(比如应用处理了多少条数据、某个核心函数的执行耗时),才需要在代码里添加Prometheus自定义指标,举个Scala的例子:
import io.prometheus.client.Counter import io.prometheus.client.dropwizard.DropwizardExports // 初始化自定义计数器 val processedRecords = Counter.build() .name("processed_records_total") .help("Total number of business records processed") .register() // 在数据处理逻辑中增加计数 processedRecords.inc() // 把Spark自带的Dropwizard指标也同步暴露 DropwizardExports.register(SparkEnv.get.metricsSystem)
内容的提问来源于stack exchange,提问作者xmlParser
相关产品推荐
相关产品推荐

