我最近发现
a way to use logback instead of log4j
spark-submit
). 然而,还有最后一块不见了。
问题是Spark努力不让自己看到
logback.xml
类路径中的设置。我已经找到了在本地执行期间加载它的方法:
到目前为止我拥有的
基本上,检查系统属性
logback.configurationFile
logback.xml
从我的
/src/main/resources/
// the same as default: https://logback.qos.ch/manual/configuration.html
private val LogbackLocation = Option(System.getProperty("logback.configurationFile"))
// add some default logback.xml to your /src/main/resources
private lazy val defaultLogbackConf = getClass.getResource("/logback.xml").getPath
private def getLogbackConfigPath = {
val path = LogbackLocation.map(new File(_).getPath).getOrElse(defaultLogbackConf)
logger.info(s"Loading logging configuration from: $path")
path
}
然后当我初始化SparkContext时。。。
val sc = SparkContext.getOrCreate(conf)
sc.addFile(getLogbackConfigPath)
我可以确认它在本地有效。
玩弄
spark-submit \
...
--master yarn \
--class com.company.Main\
/path/to/my/application-fat.jar \
param1 param2
Exception in thread "main" java.io.FileNotFoundException: Added file file:/path/to/my/application-fat.jar!/logback.xml does not exist
我认为这是胡说八道,因为首先应用程序会找到文件(根据我的代码)
getClass.getResource("/logback.xml").getPath
sc.addFile(getLogbackConfigPath)
原来…哇!那里没有文件!?搞什么鬼!?为什么它在jar中找不到文件。很明显,它就在那里,我做到了
检查过了。
spark提交
所以我想,好的。我会传递我的文件,因为我可以指定系统属性。我把
application-fat.jar
以及:
spark-submit \
...
--conf spark.driver.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
--conf spark.executor.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
--master yarn \
--class com.company.Main\
/path/to/my/application-fat.jar \
param1 param2
我得到了与上面相同的错误。所以我的设置完全被忽略了!为什么?如何指定
-Dlogback.configurationFile
谢谢