Передайте системное свойство для отправки и чтения файла из пути к классам или пользовательского пути.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Передайте системное свойство для отправки и чтения файла из пути к классам или пользовательского пути.

Сообщение Anonymous »

Недавно я нашел способ использовать logback вместо log4j в Apache Spark (как для локального использования, так и для искровой отправки). Однако не хватает последней части.
Проблема в том, что 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
}
А потом, когда я инициализирую свой SparkContext...

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»