YARN模式下本地提交Spark任务,集群History Server不显示任务的问题
问题分析与解决方案
一、本地Spark History Server能显示任务的原因
- 本地提交任务时,Spark会将任务的事件日志写入本地配置的日志存储路径(由
spark.eventLog.dir指定,默认是本地文件系统路径)。本地启动的History Server会读取这个本地路径下的日志文件,因此能正常展示任务状态。 - 集群的History Server读取的是集群侧配置的日志存储路径,而你之前提交任务时,日志并没有写入集群的共享存储(比如HDFS),所以集群History Server找不到对应日志,自然看不到任务。
二、无需SSH到集群,让集群History Server显示任务的方法
核心是让本地提交的任务把事件日志写入集群的共享存储(如HDFS),同时确保集群History Server指向该路径:
方法1:修改本地Spark配置文件
- 打开本地Spark安装目录下的
conf/spark-defaults.conf文件,添加或修改以下配置:
替换spark.eventLog.enabled true spark.eventLog.dir hdfs://<集群HDFS地址>:<端口>/spark-history-logs<集群HDFS地址>:<端口>为你集群实际的HDFS地址(比如namenode:9000),如果该HDFS路径不存在,可在本地执行hdfs dfs -mkdir -p /spark-history-logs创建。 - 确保集群的Spark History Server配置文件(
conf/spark-defaults.conf)中,spark.eventLog.dir和上述路径完全一致(若集群侧已配置正确则无需修改)。 - 重新提交任务:执行原提交命令
spark-submit --deploy-mode yarn wordcount.py,此时任务日志会写入集群HDFS的指定路径,集群History Server就能读取并展示任务状态。
方法2:提交任务时通过参数指定
如果不想修改本地配置文件,可在提交任务时直接指定日志相关参数:
spark-submit --deploy-mode yarn \ --conf spark.eventLog.enabled=true \ --conf spark.eventLog.dir=hdfs://<集群HDFS地址>:<端口>/spark-history-logs \ wordcount.py
内容的提问来源于stack exchange,提问作者nayak0765
相关产品推荐
相关产品推荐

