Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark Kubernetes-使用--files或Spark.files将配置文件从驱动程序复制到执行器时发生FileNotFoundException_Java_Scala_Docker_Apache Spark_Kubernetes - Fatal编程技术网

Java Spark Kubernetes-使用--files或Spark.files将配置文件从驱动程序复制到执行器时发生FileNotFoundException

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工作负载从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提交命令

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的行为是否因处于客户端模式或群集模式而有所不同?提前感谢您的帮助。