Проблема в том, что Spark очень старается не видеть настройки logback.xml в своем пути к классам. Я уже нашел способ загрузить его во время локального выполнения:
Что у меня есть на данный момент
По сути, проверка системного свойства logback.configurationFile< /code>, но на всякий случай загружаю 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
}
Код: Выделить всё
val sc = SparkContext.getOrCreate(conf)
sc.addFile(getLogbackConfigPath)
Играем с Spark-submit
Код: Выделить всё
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)
Другой подход к искровой отправке
Поэтому я подумал: ОК. Я передам свой файл, так как могу указать системное свойство. Я поместил файл logback.xml рядом с моим 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
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/454 ... ustom-path