6节点Datastax 5.1.x集群Spark History UI不显示已完成作业求助
你提到的两个核心问题:
- Datastax 5.1集群(Spark版本2.0.2.15)中,Spark History UI无法加载全部已完成及未完成作业
- 6节点Datastax 5.1.x集群已在所有节点启用Spark历史服务器,但UI仍不显示已完成作业
先看你给出的spark-defaults.conf配置里的关键矛盾点:你的事件日志写入路径和历史服务器读取路径不一致——spark.eventLog.dir配置的是本地文件系统路径file:///var/lib/spark/worker,而spark.history.fs.logDirectory用的是分布式DSEFS路径dsefs:///spark/events。这会导致Spark作业把事件日志存在各个节点的本地目录,而历史服务器从DSEFS读,自然找不到这些日志,也就看不到已完成作业了。
下面是具体的排查和解决步骤:
1. 统一事件日志的存储路径
把spark.eventLog.dir修改为和spark.history.fs.logDirectory一致的分布式路径,这样所有节点的作业都会把日志写入DSEFS,历史服务器可以统一读取:
# 修改后的事件日志路径,和历史服务器读取路径保持一致 spark.eventLog.dir dsefs:///spark/events spark.eventLog.enabled true spark.history.fs.logDirectory dsefs:///spark/events # 其他配置保持不变 spark.history.fs.update.interval 30s spark.history.retainedApplications 50 spark.eventLog.permissions=777 spark.history.fs.cleaner.enabled true spark.history.fs.cleaner.interval 1d spark.history.fs.cleaner.maxAge 7d
2. 验证DSEFS路径的可用性与权限
- 先检查DSEFS中
/spark/events目录是否存在,执行命令:
如果不存在,创建目录:dse fs ls /spark/eventsdse fs mkdir -p /spark/events - 设置合适的权限(注意生产环境不建议用777,可根据集群权限策略调整):
dse fs chmod 777 /spark/events - 提交一个测试Spark作业,然后查看DSEFS目录下是否生成了对应的事件日志文件,确认日志写入正常。
3. 重启Spark历史服务器并验证配置加载
修改配置后,需要在所有节点重启Spark历史服务器,确保新配置生效:
# 停止服务 dse spark-history-server stop # 启动服务 dse spark-history-server start
然后查看历史服务器的日志(默认路径/var/log/dse/spark/spark-history-server.log),检查是否有报错信息,比如无法访问DSEFS、权限不足等问题。
4. 关于未完成作业不显示的说明
Spark History UI默认主要展示已完成的作业,未完成的作业的UI是运行在对应作业的Driver节点上的Spark UI,而非历史服务器。如果你期望在历史服务器看到未完成作业,可以检查是否配置了spark.history.ui.showIncomplete=true(Spark 2.0.2支持该配置,默认值为true),如果配置了但仍不显示,需要确认:
- 未完成作业的Driver是否还在运行
- 作业的事件日志是否已部分写入DSEFS(历史服务器会定期刷新日志,可调整
spark.history.fs.update.interval缩短刷新间隔)
内容的提问来源于stack exchange,提问作者Sankar Ramalingam

