Java Spark Kubernetes-使用--files或Spark.files将配置文件从驱动程序复制到执行器时发生FileNotFoundException
我们正在将Spark工作负载从Cloudera迁移到Kubernetes 出于演示目的,我们希望在集群模式下使用spark submit在minikube集群中运行一个spark作业 我想使用spark.file conf将一个类型安全配置文件传递给我的执行者(我也尝试了--files)。配置文件已在构建时复制到/opt/spark/conf目录下的spark docker映像 然而,当我提交作业时,我有一个java.io.FileNotFoundException:File文件:/opt/spark/conf/application.conf不存在 我的理解是spark.files将文件从驱动程序复制到执行器的工作目录 我错过什么了吗?谢谢你的帮助 这是我的spark提交命令Java Spark Kubernetes-使用--files或Spark.files将配置文件从驱动程序复制到执行器时发生FileNotFoundException,java,scala,docker,apache-spark,kubernetes,Java,Scala,Docker,Apache Spark,Kubernetes,我们正在将Spark工作负载从Cloudera迁移到Kubernetes 出于演示目的,我们希望在集群模式下使用spark submit在minikube集群中运行一个spark作业 我想使用spark.file conf将一个类型安全配置文件传递给我的执行者(我也尝试了--files)。配置文件已在构建时复制到/opt/spark/conf目录下的spark docker映像 然而,当我提交作业时,我有一个java.io.FileNotFoundException:File文件:/opt/sp
spark-submit \
--master k8s://https://192.168.49.2:8443 \
--driver-memory ${SPARK_DRIVER_MEMORY} --executor-memory ${SPARK_EXECUTOR_MEMORY} \
--deploy-mode cluster \
--class "${MAIN_CLASS}" \
--conf spark.driver.defaultJavaOptions="-Dconfig.file=local://${POD_CONFIG_DIR}/application.conf $JAVA_ARGS" \
--conf spark.files="file:///${POD_CONFIG_DIR}/application.conf,file:///${POD_CONFIG_DIR}/tlereg.properties" \
--conf spark.executor.defaultJavaOptions="-Dconfig.file=local://./application.conf" \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=$SPARK_CONTAINER_IMAGE \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.kryoserializer.buffer.max=512M \
--conf spark.driver.maxResultSize=8192M \
--conf spark.kubernetes.authenticate.caCertFile=$HOME/.minikube/ca.crt \
--conf spark.executor.extraClassPath="./" \
local:///path/to/uber/jar.jar \
"${PROG_ARGS[@]}" > $LOG_FILE 2>&1
我已经弄明白了
spark submit
向kubernetes master的api服务器发送创建驱动程序吊舱的请求。configmap卷安装到位于mountPath:/opt/spark/conf
的驱动程序机架上,这将覆盖docker容器中位于该路径的我的配置文件。
解决方法:在docker文件中编辑/opt/spark/conf到/opt/spark/config,以便从后者复制我的配置文件。我建议您在docker构建映像期间添加一行打印目录内容,以确保将文件复制到/opt/spark/conf/中。我尝试了
docker run-it--rm spark:2.4.5 bash
我检查application.conf是否已复制到/opt/spark/confTry:--conf spark.files=“${POD\u CONFIG\u DIR}/application.conf,${POD\u CONFIG\u DIR}/tlereg.properties”\并尝试:--conf spark.files=“file://${POD\u CONFIG\u DIR}/tlereg.properties”\我尝试了这两种方法。它们产生:ERROR SparkContext:初始化SparkContext时出错。java.io.FileNotFoundException:File文件:/opt/spark/conf/application.conf不存在。当我说这些文件是从驱动程序pod(使用spark:2.4.5映像构建,我确信它包含配置文件)复制的时候,我说的对吗?否则,它在哪里查找这些文件?spark.files的行为是否因处于客户端模式或群集模式而有所不同?提前感谢您的帮助。