Как остановить отображение информационных сообщений на консоли 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


как мне остановить их?

733   15  

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%n

log4j.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" ..иной выбор..

  1. настройка conf / log4j. properties как описано другими log4j. rootCategory=ошибка, консоль
  2. убедитесь, что при выполнении задания spark вы передаете флаг --file с путем к файлу log4j. properties
  3. если он все еще не работает, у вас может быть jar, который имеет log4j.properties, который вызывается перед вашим новым log4j.properties. Снимите что настройки log4j.свойства из банка (в случае необходимости)
sparkContext.setLogLevel("OFF")

в дополнение ко всем вышеперечисленным сообщениям, вот что решило проблему для меня.

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

    Ничего не найдено.