当前位置: 首页 > 知识库问答 >
问题:

使用--files或Spark.files将配置文件从驱动程序复制到执行程序时,火花kubernetes-fileNotFoundException

韩耘豪
2023-03-14

我们正在将Spark工作负载从Cloudera迁移到Kubernetes。

出于演示目的,我们希望在集群模式下使用spark-submit在minikube集群中运行一个spark作业。

我想使用spark.file conf将一个类型安全配置文件传递给我的执行程序(我也尝试了--files)。配置文件已在生成时复制到/opt/spark/conf目录下的spark docker映像中。

然而,当我提交作业时,我有一个java.io.FileNotFoundException:File 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

共有1个答案

卞浩漫
2023-03-14

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

 类似资料:
  • 如前所述,更改Spark集群冗长性的理想方法是更改相应的log4j.properties。然而,在dataproc上,Spark在Yarn上运行,因此我们必须调整全局配置,而不是/usr/lib/Spark/conf 几点建议: 在dataproc上,我们有几个gcloud命令和属性可以在集群创建过程中传递。请参阅留档是否可以通过指定更改 /etc/hadoop/conf下的log4j.prope

  • 我在一个单独的Docker中运行spark-master和spark-worker。 我能看见他们在跑 PS-EF grep火花根3477 3441 0 1 05?00:04:17/usr/lib/jvm/java-1.8-openjdk/jre/bin/java-cp/usr/local/spark/conf/:/usr/local/spark/jars/*-xmx1g org.apache.s

  • 我是Spark的初学者,我正在运行我的应用程序,从文本文件中读取14KB的数据,执行一些转换和操作(收集、收集AsMap),并将数据保存到数据库 我在我的macbook上本地运行它,内存为16G,有8个逻辑核。 Java最大堆设置为12G。 这是我用来运行应用程序的命令。 bin/spark-submit-class com . myapp . application-master local[*

  • 背景我试图运行一个火花提交命令,该命令来自Kafka,并在AWS EMR(版本5.23.0)中使用scala(版本2.11.12)执行JDBC接收器到postgres DB。我看到的错误是 假设问题我认为错误告诉我,在执行器上找不到JDBCPostgres驱动程序,这就是为什么它不能下沉到postgres。 以前的尝试我已经做了以下事情: 在我的结构化流作业中将我的驱动程序标识为 在我的火花提交作

  • 我正在使用Selenium来自动化测试。我的应用程序只使用IE,它不适用于其他浏览器。 代码: 这是我得到的错误 驱动程序可执行文件的路径必须由webdriver.ie.driver系统属性设置;有关更多信息,请参阅https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver.最新版本可从以下网站下载:http://www.s

  • 我经常在每个分布式计算开源项目中看到以下术语,尤其是在Apache spark中,希望用一个简单的例子来解释。 spark.driver.cores - 仅在群集模式下用于驱动程序进程的核心数。 火花驱动程序内存 - 用于驱动程序进程的内存量 spark.executor.cores - 每个执行器上使用的核心数 spark.executor.memory - 每个执行程序进程要使用的内存量 火花