我们正在将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
字符串
2条答案
按热度按时间fgw7neuy1#
我已经解决了。
spark-submit
向kubernetes master的api-server发送请求以创建一个驱动程序pod。在mountPath: /opt/spark/conf
处将一个javemap卷挂载到驱动程序的pod,这将覆盖我在docker容器中位于该路径的配置文件。解决方法:将/opt/spark/conf编辑为Dockerfile中的/opt/spark/config,以便从后者复制我的配置文件。pdtvr36n2#
spark-submit接受来自命令行的conf,并使用运行
spark-submit
的机器上的/opt/spark/conf目录中的conf。请确保通过spark-submit在客户端计算机上提供配置(例如:airflow)
字符串