Все методы собраны с примерами
вступление
На самом деле, есть много способов сделать это . Некоторые из них сложнее других, но вам решать, какой из них подходит вам больше всего. Я постараюсь продемонстрировать их все.
# 1 Программно в вашем приложении
Кажется, это самый простой способ, но вам нужно будет перекомпилировать приложение, чтобы изменить эти настройки. Лично мне это не нравится, но работает нормально.
Пример:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
Вы можете достичь гораздо большего, используя log4j
API.
Источник: [ Документы конфигурации Log4J , раздел конфигурации]
# 2 Проход log4j.properties
во времяspark-submit
Это очень сложно, но не невозможно. И мой любимый.
Log4J при запуске приложения всегда ищет и загружает log4j.properties
файл из classpath.
Однако при использовании spark-submit
classpath Spark Cluster имеет приоритет над classpath приложения! Вот почему размещение этого файла в вашем fat-jar не отменит настройки кластера!
Добавить -Dlog4j.configuration=<location of configuration file>
в
spark.driver.extraJavaOptions
(для водителя) или
spark.executor.extraJavaOptions
(для исполнителей) .
Обратите внимание, что при использовании файла file:
протокол должен быть явно указан, и файл должен существовать локально на всех узлах .
Чтобы выполнить последнее условие, вы можете либо загрузить файл в место, доступное для узлов (например hdfs
), либо получить к нему локальный доступ с помощью драйвера, если используетеdeploy-mode client
. В противном случае:
загрузить пользовательский log4j.properties
с помощью spark-submit, добавив его в--files
список файлов, которые будут загружены с приложением.
Источник: Документация Spark, Отладка
шаги:
Пример log4j.properties
:
# Blacklist all to warn level
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
Выполнение spark-submit
для режима кластера:
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Обратите внимание, что вы должны использовать, --driver-java-options
если используете client
режим. Spark Docs, среда выполнения
Выполнение spark-submit
для режима клиента:
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Ноты:
- Файлы, загруженные с
spark-cluster
помощью, --files
будут доступны в корневом каталоге, поэтому нет необходимости добавлять какой-либо путь в file:log4j.properties
.
- Файлы в списке
--files
должны быть указаны с абсолютным путем!
file:
префикс в конфигурации URI является обязательным.
# 3 Редактировать кластеры conf/log4j.properties
Это изменяет файл конфигурации глобальной регистрации .
обновите $SPARK_CONF_DIR/log4j.properties
файл, и он будет автоматически загружен вместе с другими конфигурациями.
Источник: Документация Spark, Отладка
Чтобы найти свой, SPARK_CONF_DIR
вы можете использовать spark-shell
:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
Теперь просто отредактируйте /var/lib/spark/latest/conf/log4j.properties
(с примером из метода # 2), и все ваши приложения будут использовать эту конфигурацию.
# 4 Переопределить каталог конфигурации
Если вам нравится решение № 3, но вы хотите настроить его для каждого приложения, вы можете скопировать conf
папку, отредактировать ее содержимое и указать в качестве корневой конфигурации во время spark-submit
.
Чтобы указать другой каталог конфигурации, отличный от стандартного “SPARK_HOME/conf”
, вы можете установить SPARK_CONF_DIR
. Свеча будет использовать файлы конфигурации ( spark-defaults.conf
, spark-env.sh
, log4j.properties
, и т.д. ) из этого каталога.
Источник: Spark Docs, Конфигурация
шаги:
- Копировать кластеры
conf
папку (подробнее, метод № 3)
- редактировать
log4j.properties
в этой папке (пример в методе № 2)
Установите SPARK_CONF_DIR
в эту папку, перед выполнением spark-submit
,
пример:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Вывод
Я не уверен, есть ли какой-либо другой метод, но я надеюсь, что это охватывает тему от А до Я. Если нет, не стесняйтесь пинговать меня в комментариях!
Приятного пути!