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

运行Spark作业时出现java.io.FileNotFoundException的原因排查

Spark作业提交失败排查:FileNotFoundException(Spark Job History目录缺失)

提交命令

gcloud dataproc jobs submit spark \
--cluster=clusterName \
--class=clazzName \
--jars=gs://abc/def/ghi.jar \
--region=us-central1 \
--files=gs://abc/def/jkl.json \
--properties=spark.driver.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.memory=6G,spark.driver.memory=4G,spark.executor.cores=3,spark.executor.instances=4

核心错误信息

ERROR org.apache.spark.SparkContext: Error initializing SparkContext.
java.io.FileNotFoundException: File not found: gs://temp-bucket/f80f8cb3-0358-445e-8ec2-819e4282bfe4/spark-job-history

原因分析

  1. 事件日志目录不存在:Spark默认启用事件日志记录,但指定的GCS目录gs://temp-bucket/.../spark-job-history未创建,且Spark无法自动生成该路径。
  2. 权限不足:Dataproc集群的服务账号没有对temp-bucket的写入/目录创建权限,导致无法初始化日志目录。
  3. 配置冲突:作业代码或集群全局配置中指定了无效的事件日志路径,且未开启自动创建目录的参数。

解决方法

方法1:手动创建缺失目录

通过GCS控制台或gsutil命令创建目标目录:

# 创建具体的日志目录
gsutil mkdir gs://temp-bucket/f80f8cb3-0358-445e-8ec2-819e4282bfe4/spark-job-history
# 若为动态生成的UUID目录,直接创建父桶目录即可
gsutil mkdir gs://temp-bucket/

方法2:修改Spark配置,自动创建目录

提交作业时添加自动修复目录的参数,同时指定合法的日志路径:

gcloud dataproc jobs submit spark \
--cluster=clusterName \
--class=clazzName \
--jars=gs://abc/def/ghi.jar \
--region=us-central1 \
--files=gs://abc/def/jkl.json \
--properties=spark.driver.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.memory=6G,spark.driver.memory=4G,spark.executor.cores=3,spark.executor.instances=4,spark.eventLog.dir=gs://temp-bucket/spark-job-history,spark.eventLog.enabled=true,spark.hadoop.fs.gs.implicit.dir.repair=true

其中spark.hadoop.fs.gs.implicit.dir.repair=true会让GCS文件系统自动创建缺失的目录。

方法3:修复Dataproc服务账号权限

确保Dataproc集群的服务账号(格式通常为service-<project-number>@gcp-sa-dataproc.iam.gserviceaccount.com)拥有roles/storage.objectAdmin或对temp-bucket的单独写入权限:

  • 打开GCP控制台IAM页面
  • 找到对应服务账号,为其添加存储桶的写入权限

方法4:临时禁用事件日志

若不需要作业历史记录,可直接关闭事件日志功能:

gcloud dataproc jobs submit spark \
--cluster=clusterName \
--class=clazzName \
--jars=gs://abc/def/ghi.jar \
--region=us-central1 \
--files=gs://abc/def/jkl.json \
--properties=spark.driver.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.extraJavaOptions="-Dconfig.file=application_dev.json",spark.executor.memory=6G,spark.driver.memory=4G,spark.executor.cores=3,spark.executor.instances=4,spark.eventLog.enabled=false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:01:44