Как остановить отображение информационных сообщений на консоли spark?
Я хотел бы остановить различные сообщения, которые приходят на spark shell.
Я пытался изменить 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
как мне остановить их?
15 ответов:
редактировать
conf/log4j.propertiesфайл и изменить следующую строку:log4j.rootCategory=INFO, consoleдо
log4j.rootCategory=ERROR, consoleдругой подход будет заключаться в следующем :
запустите spark-shell и введите следующее:
import org.apache.log4j.Logger import org.apache.log4j.Level Logger.getLogger("org").setLevel(Level.OFF) Logger.getLogger("akka").setLevel(Level.OFF)вы не увидите никаких журналов после этого.
другие параметры для уровня включают в себя:
all,debug,error,fatal,info,off,trace,trace_int,warn
сразу после запуска
spark-shellтип ;sc.setLogLevel("ERROR")В Spark 2.0:
spark = SparkSession.builder.getOrCreate() spark.sparkContext.setLogLevel("ERROR")
спасибо @AkhlD и @Sachin Janani за предложение изменений в .
следующий код решил мою проблему:
1) добавил
import org.apache.log4j.{Level, Logger}в разделе импорт2) Добавлена следующая строка после создания объекта контекста spark, т. е. после
val sc = new SparkContext(conf):val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR)
вы устанавливаете отключить журналы, установив его уровень в OFF следующим образом:
Logger.getLogger("org").setLevel(Level.OFF); Logger.getLogger("akka").setLevel(Level.OFF);или измените файл журнала и установите уровень журнала в off, просто изменив следующее свойство:
log4j.rootCategory=OFF, console
используйте команду ниже, чтобы изменить уровень журнала при отправке приложения с помощью spark-submit или spark-sql:
spark-submit \ --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml" \ --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml"Примечание: замените
<file path>/log4j.xmlс относительным путем к файлуlog4j.xml(ниже) сохраняется.Log4j. properties:
log4j.rootLogger=ERROR, console # set the log level for these components log4j.logger.com.test=DEBUG log4j.logger.org=ERROR log4j.logger.org.apache.spark=ERROR log4j.logger.org.spark-project=ERROR log4j.logger.org.apache.hadoop=ERROR log4j.logger.io.netty=ERROR log4j.logger.org.apache.zookeeper=ERROR # add a ConsoleAppender to the logger stdout to write to the console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout # use a simple message format log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%nlog4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> </layout> </appender> <logger name="org.apache.spark"> <level value="error" /> </logger> <logger name="org.spark-project"> <level value="error" /> </logger> <logger name="org.apache.hadoop"> <level value="error" /> </logger> <logger name="io.netty"> <level value="error" /> </logger> <logger name="org.apache.zookeeper"> <level value="error" /> </logger> <logger name="org"> <level value="error" /> </logger> <root> <priority value ="ERROR" /> <appender-ref ref="console" /> </root> </log4j:configuration>заменить ConsoleAppender в log4j.xml если вам нужно записать журналы в файл вместо консоли.
LOG_DIR- это переменная для каталога журналов, который вы можете предоставить с помощьюspark-submit --conf "spark.driver.extraJavaOptions=-D.<appender name="file" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="${LOG_DIR}"/> <param name="datePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/> </layout> </appender>
ответы выше правильные, но точно не помогли мне, так как мне нужна была дополнительная информация.
Я только что установил Spark, поэтому файл log4j все еще имел '.суффикс шаблона и не читался. Я считаю, что ведение журнала по умолчанию используется для Spark core logging conf.
Так что если вы похожи на меня и найти, что ответы выше не помогли, то, возможно, Вам тоже придется удалить.суффикс шаблона из вашего файла log4j conf, а затем выше работает отлично!
http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html
Я просто добавляю эту строку во все мои скрипты pyspark сверху чуть ниже операторов импорта.
SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")пример заголовка моих скриптов pyspark
from pyspark.sql import SparkSession, functions as fs SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")
в Python / Spark мы можем сделать:
def quiet_logs( sc ): logger = sc._jvm.org.apache.log4j logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR ) logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )после определения Sparkcontaxt 'sc' вызовите эту функцию с помощью: quiet_logs (sc )
tl; dr
для контекста Spark вы можете использовать:
sc.setLogLevel(<logLevel>)здесь
loglevelможет быть все, отладка, ошибка, фатальная, информация, выкл, трассировка или ПРЕДУПРЕЖДАТЬ.
детали-
внутри
setLogLevelзвонкиorg.apache.log4j.Level.toLevel(logLevel)что он затем использует для установки с помощьюorg.apache.log4j.LogManager.getRootLogger().setLevel(level).вы можете непосредственно установить уровень ведения журнала
OFFиспользование:LogManager.getLogger("org").setLevel(Level.OFF)вы можете настроить ведение журнала по умолчанию для Искры оболочки в
conf/log4j.properties. Используйтеconf/log4j.properties.templateв качестве отправной точки.настройка уровней журнала в приложениях Spark
в автономных приложениях Spark или во время сеанса Spark Shell используйте следующее:
import org.apache.log4j.{Level, Logger} Logger.getLogger(classOf[RackResolver]).getLevel Logger.getLogger("org").setLevel(Level.OFF) Logger.getLogger("akka").setLevel(Level.OFF)отключение ведения журнала(в log4j):
используйте следующее в
conf/log4j.propertiesчтобы полностью отключить ведение журнала:log4j.logger.org=OFF
ссылка: освоение искры Яцека Ласковского.
интересная идея заключается в использовании RollingAppender, как предлагается здесь:http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/ чтобы вы не "загрязняли" пространство консоли, но все же могли видеть результаты под $YOUR_LOG_PATH_HERE/${dm.logging.name}. log.
log4j.rootLogger=INFO, rolling log4j.appender.rolling=org.apache.log4j.RollingFileAppender log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n log4j.appender.rolling.maxFileSize=50MB log4j.appender.rolling.maxBackupIndex=5 log4j.appender.rolling.file=$YOUR_LOG_PATH_HERE/${dm.logging.name}.log log4j.appender.rolling.encoding=UTF-8другой метод, который решает дело наблюдать, какие заготовки у вас обычно (из разных модулей и зависимостей), и установить для каждого детализация для ведения журнала, при включении" тихих " сторонних журналов, которые слишком многословны:
например,
# Silence akka remoting log4j.logger.Remoting=ERROR log4j.logger.akka.event.slf4j=ERROR log4j.logger.org.spark-project.jetty.server=ERROR log4j.logger.org.apache.spark=ERROR log4j.logger.com.anjuke.dm=${dm.logging.level} 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
просто сделать в командной строке...
spark2-submit --driver-java-options="-Droot.logger=ERROR,console"..иной выбор..
- настройка conf / log4j. properties как описано другими log4j. rootCategory=ошибка, консоль
- убедитесь, что при выполнении задания spark вы передаете флаг --file с путем к файлу log4j. properties
- если он все еще не работает, у вас может быть jar, который имеет log4j.properties, который вызывается перед вашим новым log4j.properties. Снимите что настройки log4j.свойства из банка (в случае необходимости)
в дополнение ко всем вышеперечисленным сообщениям, вот что решило проблему для меня.
Spark использует slf4j для привязки к регистраторам. Если log4j не является первой найденной привязкой, вы можете редактировать файлы log4j.properties все, что хотите, регистраторы даже не используются. Например, это может быть возможный вывод SLF4J:
SLF4J: путь к классу содержит несколько Привязок SLF4J. SLF4J: найдено привязка в [опарник:файл:/с:/Пользователи/~/.m2 / repository / org/slf4j/slf4j-simple/1.6.6 / slf4j-simple-1.6.6.банку!/ org/slf4j/impl / StaticLoggerBinder.класс] SLF4J: найдено связывание в [jar: file:/C:/Users/~/.m2 / repository / org/slf4j/slf4j-log4j12/1.7.19 / slf4j-log4j12-1.7.19.банку!/ org/slf4j/impl / StaticLoggerBinder.класс] SLF4J: см.http://www.slf4j.org/codes.html#multiple_bindings для объяснения. SLF4J: фактическая привязка имеет тип [org.slf4j.осущ.SimpleLoggerFactory]
Так вот был использован SimpleLoggerFactory, который не заботится о настройках log4j.
исключая пакет slf4j-simple из моего проекта через
<dependency> ... <exclusions> ... <exclusion> <artifactId>slf4j-simple</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>устранена проблема, так как теперь используется привязка log4j logger и выполняется любая настройка в log4j.properties. F. Y. I. мой файл свойств log4j содержит (помимо обычной конфигурации)
log4j.rootLogger=WARN, stdout ... log4j.category.org.apache.spark = WARN log4j.category.org.apache.parquet.hadoop.ParquetRecordReader = FATAL log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFFнадеюсь, что это помогает!
просто добавьте ниже param к вашей команде spark-submit
--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"Проверьте точное имя свойства (log4jspark.корень.logger здесь) из файла log4j.properties. Надеюсь, это поможет, ура!
Comments