3
在开发过程中,我一直在“客户端”模式下运行我的spark工作。我使用“--file”与执行程序共享配置文件。驱动程序在本地读取配置文件。现在我想以“集群”模式部署作业。我现在无法与驱动程序共享配置文件。在集群模式下使用spark-submit共享配置文件
例如,我将配置文件名称作为extraJavaOptions传递给驱动程序和执行程序。我在读使用SparkFiles.get()文件
val configFile = org.apache.spark.SparkFiles.get(System.getProperty("config.file.name"))
这非常适用于执行者,但失败的驱动程序。我认为这些文件只与执行程序共享,而不与驱动程序运行的容器共享。 一种选择是将配置文件保存在S3中。我想检查这是否可以使用spark-submit来实现。
> spark-submit --deploy-mode cluster --master yarn --driver-cores 2
> --driver-memory 4g --num-executors 4 --executor-cores 4 --executor-memory 10g \
> --files /home/hadoop/Streaming.conf,/home/hadoop/log4j.properties \
> --conf **spark.driver.extraJavaOptions**="-Dlog4j.configuration=log4j.properties
> -Dconfig.file.name=Streaming.conf" \
> --conf **spark.executor.extraJavaOptions**="-Dlog4j.configuration=log4j.properties
> -Dconfig.file.name=Streaming.conf" \
> --class ....
感谢您的回应! 我已经有另一种格式的配置文件(typesafe配置)。保持配置组织而不是将它们作为KV对放在文件中有几个优点。 没有办法让我的配置文件与驱动程序共享吗? – Cheeko
@Cheeko:你是什么意思分享conf文件到驱动程序? conf文件中有什么?同样,如果你可以阅读执行者,为什么不读你的驱动程序?读取驱动程序中的相同内容并将其作为广播变量传递给执行程序..因此,您可以在两个位置使用它。 – Shankar
配置文件不在所有节点都可访问的位置。所以我使用spark-submit和--files将文件传递给所有执行者。它看起来像 - 文件没有传递给驱动程序,该驱动程序以“集群”模式运行另一个节点。 – Cheeko