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

AKS上运行Spark 3.5.0示例作业遇NoSuchFileException问题求助

解决方案

1. 修正类名参数错误

你的--class参数写错了,正确的类名是org.apache.spark.examples.sql.JavaSparkSQLExample,而非main.java.org.apache.spark.examples.sql.JavaSparkSQLExample。Spark官方示例的包路径没有main.java前缀,这个错误会直接导致找不到目标类,同时可能伴随文件找不到的连锁异常。

2. 验证镜像中Jar包是否存在

步骤1:本地检查镜像内容

执行以下命令确认镜像中是否包含目标Jar包:

docker run --rm mycontainerregistry.azurecr.io/mycustomsparkimage:latest ls /opt/spark/examples/jars/

如果输出中没有spark-examples_2.12-3.5.0.jar,说明构建镜像时未正确复制文件,问题出在构建上下文:

  • 官方Dockerfile要求从Spark发行版的根目录执行构建命令。请下载并解压Spark 3.5.0发行包(如spark-3.5.0-bin-hadoop3.tgz),进入解压后的根目录,再执行构建:
cd spark-3.5.0-bin-hadoop3
docker build -t mycustomsparkimage:latest -f kubernetes/dockerfiles/spark/Dockerfile .
  • 重新推送镜像到ACR:
docker push mycontainerregistry.azurecr.io/mycustomsparkimage:latest

步骤2:检查Jar包权限

确认镜像中Jar包的权限允许185用户读取:

docker run --rm mycontainerregistry.azurecr.io/mycustomsparkimage:latest ls -l /opt/spark/examples/jars/spark-examples_2.12-3.5.0.jar

如果权限不足,在Dockerfile中COPY examples之后添加以下命令,赋予全局读权限:

RUN chmod -R a+r /opt/spark/examples

3. 调整Spark部署方式(关键)

你当前用Kubernetes Deployment运行Spark Cluster模式,不符合Spark on Kubernetes的设计规范。Spark本身会通过spark-submit自动管理Driver和Executor Pod的生命周期,手动编写Deployment会破坏Spark的K8s集成逻辑。

推荐做法:使用spark-submit提交作业

在能访问AKS集群的机器上(如本地开发机或AKS节点),执行以下命令提交作业:

/opt/spark/bin/spark-submit \
--verbose \
--master k8s://https://sparkakscluster-dns-5i9mchtu.hcp.westeurope.azmk8s.io:443 \
--deploy-mode cluster \
--conf spark.kubernetes.namespace=spark-sql-proto \
--conf spark.kubernetes.container.image.pullPolicy=Always \
--conf spark.executor.instances=5 \
--conf spark.driver.memory=3G \
--conf spark.executor.memory=3G \
--conf spark.kubernetes.submission.waitAppCompletion=true \
--conf spark.kubernetes.driverEnv.HTTP2_DISABLE=true \
--name spark-proto-app \
--conf spark.kubernetes.container.image=mycontainerregistry.azurecr.io/mycustomsparkimage:latest \
--class org.apache.spark.examples.sql.JavaSparkSQLExample \
local:///opt/spark/examples/jars/spark-examples_2.12-3.5.0.jar

注意:使用local://而非file://,这是Spark on K8s引用容器本地文件的规范写法。

如果坚持使用Deployment(不推荐)

需调整以下参数:

  • 移除--deploy-mode cluster,改用client模式(因为Deployment已启动Driver容器)
  • 配置spark.driver.host和spark.driver.port确保Executor能连接到Driver
  • 这种方式会失去Spark自动管理Executor的能力,不建议生产环境使用

4. 排查Pod日志定位问题

若问题仍存在,查看Driver Pod日志获取详细错误信息:

kubectl logs -n spark-sql-proto <driver-pod-name>

日志会明确显示是文件不存在、类找不到还是权限问题,帮助进一步定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:34:50