无法覆盖spark中的commmandline上的Typesafe配置

时间:2017-12-10 08:23:27

标签: apache-spark properties classpath typesafe-config

我在application.conf文件夹中有一个类型安全配置src/main/resources,默认情况下已加载。

可以通过指定:

覆盖单个值
--conf spark.driver.extraJavaOptions=-DsomeValue="foo"

但是,指定一个完整的新文件,即覆盖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

无法加载foo.conf。而是将加载资源文件夹中的原始文件。 尝试来自Using typesafe config with Spark on Yarn的技巧也无济于事。

修改

Overriding multiple config values in Typesafe config when using an uberjar to deploy似乎是普通(无火花)程序的答案。 问题仍然是如何引发这种情况。

同样通过:

--conf spark.driver.extraClassPath="-Dconfig.resource=file:foo.conf"
--conf spark.driver.extraClassPath="-Dconfig.resource=foo.conf"

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

虽然,根据文件:

  

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

     
      
  • config.resource指定资源名称 - 而不是基本名称,即application.conf not application
  •   
  • config.file指定文件系统路径,同样应该包含扩展名,而不是基本名称
  •   
  • config.url指定网址
  •   
     

这些系统属性指定替换   application。{conf,json,properties},而不是添加。他们只影响   使用默认ConfigFactory.load()配置的应用程序。在里面   替换配置文件,您可以使用include“application”来包含   原始默认配置文件;在包含声明后你   可以继续覆盖某些设置。

应该可以使用这些参数。

1 个答案:

答案 0 :(得分:3)

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

spark.driver.extraClassPath更改为spark.driver.extraJavaOptions正在诀窍