Всі методи, зібрані на прикладах
Вступ
Власне, існує багато способів зробити це . Деяким важче від інших, але саме вам підійде саме той. Я спробую показати їх усіх.
№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
класу Spark Cluster перевага є перед класним шляхом додатка! Ось чому розміщення цього файлу у вашій жировій банці не змінить налаштування кластеру!
Додати -Dlog4j.configuration=<location of configuration file>
в
spark.driver.extraJavaOptions
(для водія) або
spark.executor.extraJavaOptions
(для виконавців) .
Зауважте, що якщо використовується файл, file:
протокол повинен бути явно наданий, і файл повинен існувати локально на всіх вузлах .
Щоб задовольнити останню умову, ви можете або завантажити файл у місце, доступне для вузлів (наприклад hdfs
), або отримати доступ до нього локально з драйвером, якщо використовується deploy-mode client
. Інакше:
завантажте спеціальний log4j.properties
за допомогою іскрової подачі, додавши його до --files
списку файлів, які потрібно завантажити у програмі.
Джерело: Іскрові документи, Налагодження
Кроки:
Приклад 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
режим. Іскрові документи, Runtime env
Виконання 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_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
, і т.д. ) з цього каталогу.
Джерело: Іскрові документи, Конфігурація
Кроки:
- Скопіюйте кластери
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"
Висновок
Я не впевнений, чи є якийсь інший метод, але я сподіваюся, що це стосується теми від А до Я. Якщо ні, не соромтесь зателефонувати мені в коментарях!
Насолоджуйтесь своїм шляхом!