spark ui打不开或指标为空,主因是监控未启用、端口冲突或配置错误;metrics.properties需严格路径/格式;executor shuffle明细需手动开启显示;prometheus上报须配sink类、端口及namespace。

Spark UI 端口打不开或指标为空
本地开发或 YARN 集群上跑 spark-submit 后,http://localhost:4040(或对应 driver 端口)打不开,或者打开后 Jobs/Stages/Storage 页面全是空的——大概率是 Spark 没启用监控模块,或端口被占、网络隔离。
- 确认启动时没加
--conf spark.ui.enabled=false;默认是true,但有些打包脚本会误关 - Driver 进程必须存活,且未设置
spark.ui.port为 0(这会让 Spark 随机选端口,得看日志找实际值) - YARN 模式下,
spark.ui.port无效,要用spark.yarn.appMasterEnv.SPARK_UI_PORT或直接查 YARN Web UI 里的 ApplicationMaster 链接 - 本地调试时如果用
spark.master=local[*]却看不到 UI,检查是否在SparkContext构建前就调用了sc.stop()或异常退出
metrics.properties 配置不生效
想把 JVM GC、executor 内存、shuffle 指标推到 Graphite 或 Prometheus,改了 $SPARK_HOME/conf/metrics.properties 却没数据——配置文件路径、格式、sink 类名三者错一个就静默失败。
- 配置文件必须叫
metrics.properties,且放在SPARK_HOME/conf/下;若用--files提交,需额外通过--conf spark.metrics.conf=metrics.properties指定路径 - 每行只能有一个 key-value,不能有空格或注释符号
#在中间;比如sink.graphite.class=org.apache.spark.metrics.sink.GraphiteSink少个点就加载失败 - Graphite sink 需要
graphite.host和graphite.port,但默认不带spark-metrics_2.12依赖,YARN 模式下得用--jars补上 - 开启
source.jvm才能看到 GC/Heap,否则只有 Spark 自身的 executor/shuffle 指标
如何获取 executor 级别的 shuffle write/read 量
业务慢了,想确认是不是 shuffle 数据膨胀导致磁盘/网络瓶颈,但 Spark UI 的 Summary 只给总和,看不到每个 executor 的明细。
快速学习python书第二版是一本简洁清晰介绍python3的书籍,目标是新学习python 的程序员。这本更新版本囊括了所有python3版本的变化,即python从早期版本到新版本的特性变化 本书一开始用基础但是很有用的程序来传授给读者关于python的核心特性,包括语法,控制流程和数据结构。然后本书使用大型的应用程序包括代码管理,面向对象编程,web开发和转换老版本的python程序到新的版本等等。 忠实于作者的经验十足的开发者的观众,作者仔细检查普通程序特点,同时增加了更多细节关于这些python
- UI 的 Executors 标签页里,
Shuffle Read/Write Metrics列默认不显示,要手动勾选右上角的「Show additional metrics」 - 这些字段本质来自
ExecutorMetricsSource,底层对应ShuffleReadMetrics和ShuffleWriteMetrics对象,只在 task 完成后上报,running 中的 task 不可见 - 若用 Structured Streaming,
StreamingQueryListener拿不到 shuffle 细节,得靠StreamingQueryProgress的durationMs和stateOperators间接推测 - 注意单位:UI 显示的是 bytes,不是 records;
Shuffle Write Bytes Written包含压缩前原始大小,和spark.sql.adaptive.enabled开启后的动态调整无关
自定义指标上报到 Prometheus 的最小可行方案
不想搭 Graphite,只想用 Prometheus 抓 Spark 的自定义业务指标(比如某个 UDF 调用耗时),又不想引入 micrometer 全套生态。
立即学习“Python免费学习笔记(深入)”;
- Spark 3.0+ 原生支持 Prometheus sink,配置项是
sink.prometheus.class=org.apache.spark.metrics.sink.PrometheusSink - 必须显式指定
prometheus.port(如9091),且该端口不能被占用;Prometheus 抓取路径固定为/metrics/executors/prometheus - 自定义指标要注册到
MetricRegistry,例如:sc.listenerBus.metricsSystem.registerSource(new MyCustomSource()),其中MyCustomSource实现MetricSource - 别漏掉
spark.metrics.namespace,否则所有指标都带app前缀,和你的 job 名不一致,查起来费劲
真正麻烦的是指标生命周期:driver 重启后 registry 清空,executor 挂掉时上报中断,这些边界情况比配置本身更常出问题。









