Geo*_*ler 2 properties classpath typesafe-config apache-spark
我application.conf在src/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" 来包含原始默认配置文件;在包含语句之后,您可以继续覆盖某些设置。
应该可以使用这些参数。
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就是诀窍