docker Spark Kubernetes -使用--files或spark.files将配置文件从驱动程序复制到执行器时出现FileNotFoundException

beq87vna  于 11个月前  发布在  Docker
关注(0)|答案(2)|浏览(110)

我们正在将Spark工作负载从Cloudera迁移到Kubernetes。
出于演示目的,我们希望在minikube集群中使用spark-submit在集群模式下运行一个spark作业。
我想使用spark.file conf(我也试过--files)传递一个类型安全的配置文件给我的执行器。配置文件已经在构建时复制到spark docker镜像的/opt/spark/conf目录中。
然而,当我提交我的工作,我有一个java.io.FileNotFoundException:File文件:/opt/spark/conf/application.conf不存在
我的理解是spark.files将文件从驱动程序复制到执行器的工作目录。
我错过什么了吗?谢谢你的帮助。
下面是我的spark-submit命令

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

字符串

fgw7neuy

fgw7neuy1#

我已经解决了。spark-submit向kubernetes master的api-server发送请求以创建一个驱动程序pod。在mountPath: /opt/spark/conf处将一个javemap卷挂载到驱动程序的pod,这将覆盖我在docker容器中位于该路径的配置文件。解决方法:将/opt/spark/conf编辑为Dockerfile中的/opt/spark/config,以便从后者复制我的配置文件。

pdtvr36n

pdtvr36n2#

spark-submit接受来自命令行的conf,并使用运行spark-submit的机器上的/opt/spark/conf目录中的conf。
请确保通过spark-submit在客户端计算机上提供配置(例如:airflow)

spark-submit --master k8s://https://kubernetes.default.svc.cluster.local:443 --conf spark.driver.memory=1g --conf spark.dynamicAllocation.enabled=true --conf spark.kubernetes.driver.podTemplateFile=/opt/spark/conf/driver-template.yaml --conf spark.kubernetes.driver.podTemplateFile=/opt/spark/conf/executor-template.yaml --name app --class <class> --deploy-mode cluster <.jar>

字符串

相关问题