Как переопределить Spark log4j.properties на драйвер?

Я пытаюсь переопределить Spark по умолчанию log4j.properties, но log4j.properties не повезло. Я пробовал добавить следующее в spark-submit:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=/tmp/log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=/tmp/log4j.properties"

Но это не сработало. Я также попытался использовать --files в spark-submit но это тоже не сработало. У кого-нибудь есть настройки журналирования, поэтому у вас есть файл log4j.properties для каждого драйвера и не используется по умолчанию?

Я использую Mesos и Marathon для запуска драйвера Spark. Я не был уверен в --files и я не смог найти примеров того, как она использовалась и что именно она делает.

Я также хотел бы отметить, что я вручную загрузил файл log4j.properties на все мои узлы, в которых были внесены изменения для тестирования.

Версия Spark 1.1.0 на данный момент.

Ответы

Ответ 1

Для драйвера/оболочки вы можете установить это с помощью --driver-java-options при запуске сценариев spark-shell или spark-submit.

В Spark вы не можете установить --conf spark.driver.extraJavaOptions, потому что это установлено после запуска JVM. При использовании сценариев получения отжига --driver-java-options заменяет эти параметры на запуск JVM (например, java -Dblah MyClass), который запускает драйвер.

Обратите внимание, что свойство -Dlog4j.configuration должно быть допустимым URL-адресом, поэтому если его где-нибудь в вашей файловой системе используйте URL file:. Если переменная ресурса не может быть преобразована в URL-адрес, например, из-за ошибки MalformedURLException, тогда log4j будет искать ресурс из пути к классам.

Например, чтобы использовать собственный файл log4j.properties,

./spark-shell --driver-java-options "-Dlog4j.configuration=file:///etc/spark/my-conf/log4j.warnonly.properties"

Ответ 2

Всего несколько деталей отключены.

Флаги conf должны выглядеть так: --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=log4j.properties" --conf spark.driver.extraJavaOptions="-Dlog4j.configuration=/tmp/log4j.properties" --files /tmp/log4j.properties

Вам также необходимо использовать параметр --files, чтобы загрузить файл log4j.properties в кластер, где исполнители могут добраться до него. Кроме того, поскольку указанные выше конфиги предполагают, что вы используете режим client, в cluster обе конфигурации будут использовать один и тот же относительный путь: -Dlog4j.configuration=log4j.properties

P.S. если ваши переопределения журналов также требуют дополнительных зависимостей, вам может понадобиться их также предоставить: --conf spark.driver.extraClassPath=custom-log4j-appender.jar См. custom-log4j-appender-in-spark-executor

Удачи.

Ответ 3

Я не мог сделать

- conf "spark.executor.extraJavaOptions = -Dlog4j.configuration =/tmp/log4j.properties"

или

- conf "spark.executor.extraJavaOptions = -Dlog4j.configuration = file:///tmp/log4j.properties"

работать.

Единственное, что работает для меня, это опции -driver-java.

Ответ 4

Существует несколько способов его достижения, но это зависит от того, как ваше/приложение должно выбрать лучший для вашего случая использования -

  • Предоставляя дополнительные параметры java для Spark Driver и Executor, в то время как ваши log4j.properties присутствуют в каждом node кластера на том же пути (или на локальном компьютере, если вы выполняете локальную работу), используйте следующую команду:

    spark-submit --master local [2] - conf 'Spark.driver.extraJavaOptions = Dlog4j.configuration = файл:/tmp/log4j.properties - conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = файл:/tmp/log4j.properties'--class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

Если log4j.properties присутствует в вашем банке в корневом пути, то вы можете пропустить файл: в команде, как показано ниже - conf 'spark.driver.extraJavaOptions = -Dlog4j.configuration = log4j.properties' --conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties'

  • Отправляя файл log4j.properties в пряжу и предоставляя дополнительные опции java для Spark Driver и Executor, таким образом log4j.properties на каждом node не требуется, пряжа будет работать в этом сценарии, используйте ниже команда

    spark-submit --master local [2] - файлы /tmp/log 4j.properties - конф 'Spark.driver.extraJavaOptions = Dlog4j.configuration = log4j.properties - conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = log4j.properties'--class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

  • Изменив исходный файл ошибки log4j.properties из искры conf OR spark

    изменить или обновить log4j.properties при /etc/spark/conf.dist/log4j.properties

Я пробовал все это и работал у меня, я бы предложил также перейти через заголовок Отладка вашего приложения "в нижней строке, которая действительно полезна - https://spark.apache.org/docs/latest/running-on-yarn.html

Ответ 5

Я не считаю, что параметр spark.driver.extraJavaOptions существует. Для spark.executor.extraJavaOptions, похоже, у вас есть опечатка. Попробуйте следующее:

--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=/tmp/log4j.properties"

Ответ 6

TL; DR

Я использую Mesos и Marathon для запуска драйвера Spark. Я не был уверен в опции --files и не смог найти примеров того, как она использовалась и что именно она делает.

Я также хотел бы отметить, что я вручную загрузил файл log4j.properties на все мои узлы, в которых были внесены изменения для тестирования.

Поскольку ваши log4j.properties уже находятся на ваших узлах, ваша единственная проблема заключается в том, что вы забыли префикс file: На данный момент ваши URI недействительны.

Они должны быть:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=file:/tmp/log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/tmp/log4j.properties"

Добавление log4j.properties с помощью --files

Отправка log4j.properties на ваши узлы во время spark-submit довольно проста. Вам необходимо указать:

--files /absolute/path/to/your/log4j.properties 

и они будут доступны в корневом каталоге для spark-узлов, поэтому вы можете получить к ним доступ с помощью:

--conf "spark.executor.extraJavaOptions=Dlog4j.configuration=file:log4j.properties"  
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties"

Нужно больше?

Если вы хотите прочитать о других способах настройки ведения журнала при использовании spark-submit, посетите мой другой подробный ответ: fooobar.com/info/78723/...