Как переопределить 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/...