无法覆盖 spark 命令行上的 Typesafe 配置

Geo*_*ler 2 properties classpath typesafe-config apache-spark

application.confsrc/main/resources默认加载的文件夹中有一个类型安全配置。

可以通过指定来覆盖单个值:

--conf spark.driver.extraJavaOptions=-DsomeValue="foo"
Run Code Online (Sandbox Code Playgroud)

但是,指定一个全新的,即覆盖application.conf文件,如:

spark-submit \
    --class my.Class \
    --master "local[2]" \
    --files foo.conf \
    --conf spark.driver.extraClassPath="-Dconfig.file=file:foo.conf" \
    --conf spark.driver.extraJavaOptions=-Dvalue="abcd" \
    job.jar
Run Code Online (Sandbox Code Playgroud)

将无法加载foo.conf。相反,将加载资源文件夹中的原始文件。尝试以下技巧:在 Yarn 上使用带有 Spark 的类型安全配置也没有帮助。

编辑

在使用 uberjar 进行部署时覆盖 Typesafe 配置中的多个配置值似乎是普通(无火花)程序的答案。问题仍然是如何激发这一点。

还通过:

--conf spark.driver.extraClassPath="-Dconfig.resource=file:foo.conf"
--conf spark.driver.extraClassPath="-Dconfig.resource=foo.conf"
Run Code Online (Sandbox Code Playgroud)

无法从命令行加载我的配置。

不过,根据文档:

https://github.com/lightbend/config对于使用 application.{conf,json,properties} 的应用程序,系统属性可用于强制不同的配置源(例如从命令行 -Dconfig.file=path/to/config -文件):

  • config.resource 指定资源名称 - 不是基本名称,即 application.conf 不是应用程序
  • config.file 指定文件系统路径,同样它应该包含扩展名,而不是基本名称
  • config.url 指定一个 URL

这些系统属性指定了 application.{conf,json,properties} 的替代品,而不是附加品。它们仅影响使用默认 ConfigFactory.load() 配置的应用程序。在替换配置文件中,您可以使用 include "application" 来包含原始默认配置文件;在包含语句之后,您可以继续覆盖某些设置。

应该可以使用这些参数。

Geo*_*ler 5

spark-submit \
    --class my.Class \
    --master "local[2]" \
    --files foo.conf \
    --conf spark.driver.extraJavaOptions="-Dvalue='abcd' -Dconfig.file=foo.conf" \
    target/scala-2.11/jar-0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

spark.driver.extraClassPathto改变spark.driver.extraJavaOptions就是诀窍