在Kubernetes部署PySpark时遭遇spark.kubernetes.file.upload.path配置错误
解决Kubernetes中Spark-submit部署PySpark时的
spark.kubernetes.file.upload.path错误 问题原因
你误解了spark.kubernetes.file.upload.path的作用:这个参数不是用来处理虚拟环境依赖的,而是Spark在cluster部署模式下,需要将你的主PySpark应用脚本上传到一个Kubernetes集群内所有Pod都能访问的存储路径,才能让Driver Pod加载执行。即使你用--archives打包了虚拟环境,主应用文件的上传路径依然必须指定,不能留空。
解决方案
指定有效的集群可访问存储路径
必须配置一个集群内Pod能读写的持久化路径,常见选项:- PVC挂载路径:如果集群有可用的PersistentVolumeClaim,指定挂载到Pod内的路径,比如:
需确保你的Spark镜像对应的Pod已经挂载了该PVC到--conf spark.kubernetes.file.upload.path=file:///mnt/spark-upload/mnt/spark-upload目录。 - 云存储路径:比如AWS S3、GCS,以S3为例:
同时要补充AWS凭证配置:--conf spark.kubernetes.file.upload.path=s3a://your-bucket-name/spark-uploads/--conf spark.hadoop.fs.s3a.access.key=your-access-key \ --conf spark.hadoop.fs.s3a.secret.key=your-secret-key
- PVC挂载路径:如果集群有可用的PersistentVolumeClaim,指定挂载到Pod内的路径,比如:
修正你的spark-submit命令
移除空值配置,替换为有效路径,比如用PVC的修正后命令片段:cmd = f""" {SPARK_HOME}/bin/spark-submit --master {SPARK_MASTER} --deploy-mode cluster --name spark-policy-engine --executor-memory {EXECUTOR_MEMORY} \ --conf spark.executor.instances={N_EXECUTORS} --conf spark.kubernetes.container.image={SPARK_IMAGE} --conf spark.kubernetes.file.upload.path=file:///mnt/spark-upload --packages org.mongodb.spark:mongo-spark-connector_2.12:3.0.1,org.apache.hadoop:hadoop-aws:3.3.1,com.amazonaws:aws-java-sdk-bundle:1.11.901,org.apache.hadoop:hadoop-common:3.3.1 --archives pyspark_venv.tar.gz#environment {spark_files} --format_id {format_id} """验证路径可用性
确保指定的路径在Spark Driver和Executor Pod中都有读写权限,避免因权限问题导致上传失败。
内容的提问来源于stack exchange,提问作者Rodrigo Alarcón
相关产品推荐
相关产品推荐

