PySpark应用无法连接Minikube中运行的Spark Master,执行脚本及spark-submit均报错求助
PySpark应用无法连接Minikube中运行的Spark Master,执行脚本及spark-submit均报错求助
看起来你遇到了两个核心问题:本地PySpark环境没配置到位,以及对Minikube中Spark集群的连接方式可能有点误解,我来一步步帮你排查解决:
一、先搞定spark-submit的报错问题
你执行spark-submit --version时出现的错误,本质是本地机器没有正确安装和配置Spark运行环境。PySpark不是光装个Python库就能跑的,它必须依赖本地的Spark安装包来获取核心JAR包和底层运行组件。
解决步骤:
- 从Spark官方渠道下载对应你Python版本的预编译Spark包(建议选带Hadoop集成的版本,比如Spark 3.5.0搭配Hadoop 3.x)
- 把压缩包解压到本地任意目录,比如
C:\spark - 配置系统环境变量:
- 新增环境变量
SPARK_HOME,值设为你的Spark解压路径(比如C:\spark) - 把
%SPARK_HOME%\bin添加到系统的PATH变量里
- 新增环境变量
- 重启你的终端和Python IDE,再执行
spark-submit --version,如果能正常显示Spark版本号,说明环境配置成功了
二、解决PySpark脚本连接Minikube Spark集群的问题
就算本地环境配置好了,直接用spark://127.0.0.1:7077连接可能还是有问题——因为Minikube里的Spark Master是在K8s的虚拟网络中,本地端口映射只是把7077端口转到了Master Pod,但Worker节点需要能访问到你的本地机器来拉取任务代码,这涉及到跨网络的互通问题。这里给你两个靠谱的方案:
方案1:用Spark on Kubernetes模式提交(推荐)
既然你的Spark集群本身就跑在Minikube的K8s上,用K8s原生的提交方式是最适配的,不需要依赖端口映射来连接spark://地址。
示例提交命令:
# 先执行minikube ip获取Minikube的IP,比如得到192.168.49.2 spark-submit \ --master k8s://https://192.168.49.2:8443 \ --deploy-mode cluster \ --name pyspark-example \ --conf spark.kubernetes.namespace=spark \ --conf spark.kubernetes.container.image=apache/spark-py:3.5.0 \ --conf spark.executor.instances=2 \ file:///C:/Users/dlrla/workspace/python/spark-test/pythonProject/main.py
提示:你需要把命令里的Minikube IP换成自己的,脚本路径也要改成你本地的绝对路径;如果是Windows终端,注意路径分隔符的转换
方案2:调整本地连接方式(适合快速测试)
如果你只是想在本地测试连接集群,需要做以下调整:
- 先获取Minikube中Spark Master的内部地址:
执行kubectl exec -n spark spark-master-<你的pod-id> -- printenv SPARK_MASTER_URL,一般会得到spark://spark-master:7077 - 把Minikube的IP和
spark-master域名映射到本地:
打开C:\Windows\System32\drivers\etc\hosts文件,添加一行:192.168.49.2 spark-master(IP替换成你的Minikube IP) - 修改PySpark脚本的Master地址:
spark = SparkSession.builder \ .appName("Pyspark example") \ .master("spark://spark-master:7077") \ .getOrCreate() - 确保本地防火墙没有阻止Spark相关端口的通信(7077、4040等)
三、关于你当前脚本的报错
你运行Python脚本时出现的"The system cannot find the path specified.",本质也是因为本地Spark环境没配置好,PySpark找不到对应的核心运行文件,所以先解决第一部分的环境配置,再调试连接问题。
备注:内容来源于stack exchange,提问作者Kimin Lee




