Я хотел бы остановить различные сообщения, которые приходят на спарк-оболочку.
Я попытался отредактировать log4j.properties
файл, чтобы остановить это сообщение.
Вот содержимое log4j.properties
# Define the root logger with appender file
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
# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
Но сообщения все еще отображаются на консоли.
Вот несколько примеров сообщений
15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 15:11:45 INFO BlockManagerMaster: Trying to register BlockManager
15/01/05 15:11:45 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager 192.168.100.85:44728 with 0.0 B RAM
15/01/05 15:11:45 INFO BlockManagerMaster: Registered BlockManager
15/01/05 15:11:45 INFO HttpServer: Starting HTTP Server
15/01/05 15:11:45 INFO HttpBroadcast: Broadcast server star
Как мне это остановить?
apache-spark
log4j
spark-submit
Vishwas
источник
источник
Сразу после запуска
spark-shell
тип;В Spark 2.0 (Scala):
Документы API: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession
Для Java:
источник
Спасибо @AkhlD и @Sachin Janani за предложения об изменениях в
.conf
файле.Следующий код решил мою проблему:
1) Добавлено
import org.apache.log4j.{Level, Logger}
в раздел импорта2) Добавлена следующая строка после создания объекта контекста искры, т.е. после
val sc = new SparkContext(conf)
:источник
Используйте следующую команду, чтобы изменить уровень журнала при отправке приложения с использованием spark-submit или spark-sql:
Примечание: замените,
<file path>
гдеlog4j
хранится файл конфигурации.Log4j.properties:
log4j.xml
Переключитесь на FileAppender в log4j.xml, если вы хотите записывать журналы в файл, а не в консоль.
LOG_DIR
переменная для каталога журналов , которые можно поставить с помощьюspark-submit --conf "spark.driver.extraJavaOptions=-D
.Еще одна важная вещь, которую следует понимать здесь: когда задание запускается в распределенном режиме (кластер режима развертывания и мастер в виде пряжи или мезо), файл конфигурации log4j должен существовать на узлах драйвера и рабочего (
log4j.configuration=file:<file path>/log4j.xml
), иначе log4j init будет жаловатьсяНамек на решение этой проблемы
Сохраните файл конфигурации log4j в распределенной файловой системе (HDFS или mesos) и добавьте внешнюю конфигурацию, используя log4j PropertyConfigurator . или используйте sparkContext addFile, чтобы сделать его доступным на каждом узле, затем используйте log4j PropertyConfigurator, чтобы перезагрузить конфигурацию.
источник
org
журналы, которые традиционно взяты из стандартного регистратора.Log4j.properties
файл? Кажется, он не используется. Вы просто документируете свойства, установленные в файле XML?--files
в команде spark-submit, чтобы сделать log4j.properties доступным на всех узлах.Log4.properties
подmain/resources
в случае, если он не существуетВсе методы собраны с примерами
вступление
На самом деле, есть много способов сделать это . Некоторые из них сложнее других, но вам решать, какой из них подходит вам больше всего. Я постараюсь продемонстрировать их все.
# 1 Программно в вашем приложении
Кажется, это самый простой способ, но вам нужно будет перекомпилировать приложение, чтобы изменить эти настройки. Лично мне это не нравится, но работает нормально.
Пример:
Вы можете достичь гораздо большего, используя
log4j
API.Источник: [ Документы конфигурации Log4J , раздел конфигурации]
# 2 Проход
log4j.properties
во времяspark-submit
Это очень сложно, но не невозможно. И мой любимый.
Log4J при запуске приложения всегда ищет и загружает
log4j.properties
файл из classpath.Однако при использовании
spark-submit
classpath Spark Cluster имеет приоритет над classpath приложения! Вот почему размещение этого файла в вашем fat-jar не отменит настройки кластера!Чтобы выполнить последнее условие, вы можете либо загрузить файл в место, доступное для узлов (например
hdfs
), либо получить к нему локальный доступ с помощью драйвера, если используетеdeploy-mode client
. В противном случае:Источник: Документация Spark, Отладка
шаги:
Пример
log4j.properties
:Выполнение
spark-submit
для режима кластера:Обратите внимание, что вы должны использовать,
--driver-java-options
если используетеclient
режим. Spark Docs, среда выполненияВыполнение
spark-submit
для режима клиента:Ноты:
spark-cluster
помощью,--files
будут доступны в корневом каталоге, поэтому нет необходимости добавлять какой-либо путь вfile:log4j.properties
.--files
должны быть указаны с абсолютным путем!file:
префикс в конфигурации URI является обязательным.# 3 Редактировать кластеры
conf/log4j.properties
Это изменяет файл конфигурации глобальной регистрации .
Источник: Документация Spark, Отладка
Чтобы найти свой,
SPARK_CONF_DIR
вы можете использоватьspark-shell
:Теперь просто отредактируйте
/var/lib/spark/latest/conf/log4j.properties
(с примером из метода # 2), и все ваши приложения будут использовать эту конфигурацию.# 4 Переопределить каталог конфигурации
Если вам нравится решение № 3, но вы хотите настроить его для каждого приложения, вы можете скопировать
conf
папку, отредактировать ее содержимое и указать в качестве корневой конфигурации во времяspark-submit
.Источник: Spark Docs, Конфигурация
шаги:
conf
папку (подробнее, метод № 3)log4j.properties
в этой папке (пример в методе № 2)Установите
SPARK_CONF_DIR
в эту папку, перед выполнениемspark-submit
,пример:
Вывод
Я не уверен, есть ли какой-либо другой метод, но я надеюсь, что это охватывает тему от А до Я. Если нет, не стесняйтесь пинговать меня в комментариях!
Приятного пути!
источник
Вы устанавливаете отключение журналов, устанавливая его уровень на OFF следующим образом:
или отредактируйте файл журнала и отключите его, просто изменив следующее свойство:
источник
Я просто добавляю эту строку ко всем моим сценариям pyspark сверху чуть ниже операторов import.
пример заголовка моих скриптов pyspark
источник
Ответы выше верны, но не помогли мне, поскольку мне потребовалась дополнительная информация.
Я только что настроил Spark, поэтому в файле log4j все еще был суффикс «.template», и он не читался. Я считаю, что в этом случае по умолчанию в журнале Spark используется логирование.
Так что если вы похожи на меня и обнаружите, что приведенные выше ответы не помогли, то, возможно, вам тоже придется удалить суффикс «.template» из файла conf log4j, и тогда вышеприведенное работает отлично!
http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html
источник
В Python / Spark мы можем сделать:
После определения Sparkcontaxt 'sc' вызовите эту функцию: quiet_logs (sc)
источник
ТЛ; др
Подробности-
Внутренне
setLogLevel
вызовы,org.apache.log4j.Level.toLevel(logLevel)
которые он затем использует для установки с помощьюorg.apache.log4j.LogManager.getRootLogger().setLevel(level)
.Вы можете настроить ведение журнала по умолчанию для оболочки Spark в
conf/log4j.properties
. Используйтеconf/log4j.properties.template
в качестве отправной точки.Установка уровней журнала в Spark-приложениях
В автономных приложениях Spark или в сеансе Spark Shell используйте следующее:
Отключение регистрации (в log4j):
Используйте следующее,
conf/log4j.properties
чтобы полностью отключить ведение журнала:Справка: Освоение искры от Яцека Ласковского.
источник
Просто сделать в командной строке ...
spark2-submit --driver-java-options="-Droot.logger=ERROR,console"
..другие варианты..источник
spark2-submit
?Просто добавьте следующий параметр к вашей команде spark-shell ИЛИ spark-submit
Проверьте точное имя свойства (log4jspark.root.logger здесь) из файла log4j.properties. Надеюсь, это поможет, ура!
источник
Интересная идея состоит в том, чтобы использовать RollingAppender, как предложено здесь: http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/, чтобы вы не «загрязняли» пространство консоли, но все еще сможете увидеть результаты в $ YOUR_LOG_PATH_HERE / $ {dm.logging.name} .log.
Другой метод, который устраняет причину, состоит в том, чтобы наблюдать, какие типы журналов у вас обычно есть (поступающие из разных модулей и зависимостей), и устанавливать для каждого гранулярность для ведения журнала, одновременно превращая «тихие» сторонние журналы, которые слишком многословны:
Например,
источник
источник
источник
val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR)
это сработалоВ дополнение ко всем вышеупомянутым постам, вот что решило проблему для меня.
Spark использует slf4j для привязки к логгерам. Если log4j не первая найденная привязка, вы можете редактировать файлы log4j.properties так, как вам хочется, регистраторы даже не используются. Например, это может быть возможный вывод SLF4J:
Так что здесь был использован SimpleLoggerFactory, который не заботится о настройках log4j.
Исключая пакет slf4j-simple из моего проекта через
решена проблема, так как теперь используется привязка логгера log4j и все настройки в log4j.properties соблюдаются. К сведению, мой файл свойств log4j содержит (помимо обычной конфигурации)
Надеюсь это поможет!
источник
Этот работал для меня. Только для сообщений об ошибках, которые отображаются как
stdout
,log4j.properties
файл может выглядеть следующим образом:источник
Если у вас нет возможности редактировать код Java, чтобы вставить
.setLogLevel()
операторы, и вы не хотите развертывать еще больше внешних файлов, вы можете использовать метод грубой силы, чтобы решить эту проблему. Просто отфильтруйте строки INFO, используя grep.источник
Если кто-то еще застрял на этом,
ничего из вышеперечисленного не помогло мне. Я должен был удалить
из моего build.gradle для журналов, чтобы исчезнуть. TLDR: не импортируйте какие-либо другие фреймворки журналирования, все будет хорошо, просто используя
org.apache.log4j.Logger
источник
Еще один способ полной остановки бревен:
Это сработало для меня. NullAppender является
источник