Windows环境Spark2.3+Minikube+K8s运行SparkPi Demo报错求助
排查Minikube上Spark 2.3 SparkPi部署问题
我之前在Windows环境下用Minikube部署Spark 2.3的SparkPi也踩过类似的坑,给你分享几个实用的排查方向:
问题1:提示SparkPi未找到
这个问题大概率是jar包路径错误或者镜像内缺少对应依赖包,可以按以下步骤逐一验证:
- 先确认你使用的
spark:spark镜像里是否存在指定的jar包:- 通过
minikube ssh进入Minikube节点 - 执行
docker run -it spark:spark bash进入镜像内部 - 查看路径
/opt/spark/examples/jars/下是否有spark-examples_2.11-2.3.0.jar
如果不存在,建议换成官方的Spark 2.3镜像apache/spark:2.3.0,这个镜像内置了完整的示例jar包,路径也完全匹配你命令里的配置
- 通过
- 另外要再次确认类名拼写是否完全正确:
org.apache.spark.examples.SparkPi,注意大小写和包名层级,别漏了任何一个点
问题2:spark-submit仅返回"State"日志无后续输出
这种情况说明Spark Driver Pod已经启动,但后续执行出现了阻塞或错误,你需要深入查看Pod日志和K8s资源状态来定位问题:
- 查看Driver Pod的完整日志:
执行以下命令获取详细错误信息:
这里能看到具体的失败原因,比如镜像拉取失败、权限不足、内存配置不够等kubectl logs spark-pi-driver - 检查Pod状态:
执行kubectl get pods,观察spark-pi-driver的状态:- 如果是
ImagePullBackOff:说明spark:spark镜像拉取失败,要么换官方镜像,要么先在Minikube本地加载镜像(执行minikube docker-env,然后在当前终端拉取镜像,这样Minikube就能直接使用本地镜像,不用从远程仓库拉取) - 如果是
CrashLoopBackOff:结合日志看具体崩溃原因,常见的是Spark配置冲突,比如spark.kubernetes.driver.pod.name重复,或者JVM内存分配不足
- 如果是
- 配置K8s权限:
Spark 2.3在K8s上运行需要Driver Pod有足够的权限创建Executor Pod,你可以创建一个专用的Service Account并绑定权限:
然后在spark-submit命令中添加配置:apiVersion: v1 kind: ServiceAccount metadata: name: spark-service-account --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: spark-role-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit subjects: - kind: ServiceAccount name: spark-service-account namespace: default--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-service-account - 验证Minikube网络连通性:
执行minikube status确认Minikube正常运行,同时检查你的Windows主机能否访问Minikube的API地址https://192.168.1.40:8443,可以用curl -k https://192.168.1.40:8443测试(-k参数跳过证书验证)
先按这些步骤排查,应该能快速定位到具体问题。
内容的提问来源于stack exchange,提问作者Ikos
相关产品推荐
相关产品推荐

