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

Spark集群重启后Worker/Master节点历史丢失,如何配置保留?

解决Spark集群重启后丢失已完成应用/驱动历史记录的问题

你已经开启了事件日志但还是丢记录?问题大概率出在Master节点元数据没持久化和事件日志存储路径不合理这两个点上,咱们一步步捋清楚:

1. 先搞定Master的元数据持久化(核心!)

Spark默认把Master的集群状态(包括已完成的应用、驱动记录)存在内存里,一旦Master重启,这些数据直接清空——这和事件日志开没开没关系,事件日志是给History Server用的,Master自身的历史记录得单独配置持久化。

打开spark-env.sh,添加以下配置:

# 用文件系统持久化的写法,换成你的持久化存储路径(比如HDFS或共享目录)
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/path/to/persistent/storage"

如果你的集群用ZooKeeper做HA,也可以用ZK来存元数据:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk-node1:2181,zk-node2:2181 -Dspark.deploy.zookeeper.dir=/spark/recovery"

⚠️ 注意:路径必须是所有节点都能访问的持久化存储,不能用本地临时目录,否则重启还是丢。

2. 修正事件日志的存储配置

你现在用的file:////app/spark/logs/data/event_log_dir是本地路径,会有两个坑:

  • 每个Worker的日志存在本地,Master/History Server读不全所有节点的日志;
  • Worker节点重启或故障,本地日志直接没了。

改成分布式存储路径(比如HDFS、NFS),在spark-defaults.conf里修改:

spark.eventLog.enabled true
# 示例:HDFS路径,换成你的集群地址
spark.eventLog.dir hdfs://your-hdfs-cluster/path/spark-event-logs
# 如果用NFS共享目录:file:///mnt/nfs/spark-event-logs

记得提前给路径开权限,比如HDFS:

hdfs dfs -mkdir -p /path/spark-event-logs
hdfs dfs -chmod 777 /path/spark-event-logs

3. 启动Spark History Server

光有日志还不够,得启动History Server来加载这些日志,这样即使Master重启,也能通过它查看所有历史记录:

$SPARK_HOME/sbin/start-history-server.sh

启动后访问http://<history-server-node>:18080,就能看到所有已完成应用的详细运行记录了。

4. 验证配置是否生效

  • 重启Master,去你配置的recoveryDirectory目录下看看,有没有生成app-*.json、driver-*.json这类元数据文件;
  • 跑个测试应用,完成后检查事件日志目录有没有对应的日志文件;
  • 重启整个集群,再登Master UI和History Server UI,确认已完成的应用/驱动记录还在。

要是你用的是YARN集群,还得开YARN的日志聚合功能,但Standalone集群按上面的步骤来就够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:59:37