Как остановить отображение сообщений INFO на искровой консоли?

Я хотел бы остановить различные сообщения, которые появляются на искровой оболочке.

Я попытался отредактировать файл 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 

Как это остановить?

    Измените файл conf/log4j.properties и измените следующую строку:

     log4j.rootCategory=INFO, console 

    в

     log4j.rootCategory=ERROR, console 

    Другой подход заключается в следующем:

    Начните искровую оболочку и введите следующее:

     import org.apache.log4j.Logger import org.apache.log4j.Level Logger.getLogger("org").setLevel(Level.OFF) Logger.getLogger("akka").setLevel(Level.OFF) 

    После этого вы не увидите никаких журналов.

    Другие опции для Уровня include: 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 за предложение об изменениях в файле .conf .

    Следующий код решил мою проблему:

    1) Добавлен import org.apache.log4j.{Level, Logger} в разделе импорта

    2) Добавлена ​​следующая строка после создания объекта контекста искры, т. val sc = new SparkContext(conf) После 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); 

    или отредактируйте файл журнала и установите уровень журнала на простое изменение следующего свойства:

     log4j.rootCategory=OFF, console 

    Используйте команду ниже, чтобы изменить уровень журнала при подаче приложения с использованием spark-submit или spark-sql:

     spark-submit \ --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/log4j.xml" \ --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/log4j.xml" 

    Примечание: замените /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

                                     

    Ответы, приведенные выше, верны, но не помогли мне, так как мне потребовалась дополнительная информация.

    Я только что установил Spark, поэтому файл log4j все еще имел суффикс «.template» и не читался. Я считаю, что регистрация, а затем по умолчанию используется для регистрации журнала Spark core.

    Поэтому, если вы похожи на меня и обнаружите, что ответы, приведенные выше, не помогли, возможно, вам тоже нужно удалить суффикс «.template» из вашего файла 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") 

    ТЛ; др

    Для контекста искры вы можете использовать:

     sc.setLogLevel() 

    где loglevel может быть ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE или WARN.


    Детали-

    Внутри setLogLevel вызывает org.apache.log4j.Level.toLevel(logLevel) который затем использует для установки с использованием org.apache.log4j.LogManager.getRootLogger().setLevel(level) .

    Вы можете напрямую установить уровни ведения журнала на OFF используя:

     LogManager.getLogger("org").setLevel(Level.OFF) 

    Вы можете настроить регистрацию по умолчанию для оболочки Spark в 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 

    Ссылка: Освоение искры Яцеком Ласковски.

    В 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)

    Интересной идеей является использование 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 

    Другим методом, который решает эту проблему, является наблюдение за тем, какие у вас обычно есть журналы (исходящие из разных модhive и зависимостей), и каждый раз задавать для каждой из них степень детализации для ведения журнала, а также «тихие» журналы сторонних журналов, которые являются слишком подробными:

    Например,

      # 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 = ERROR, консоль
    2. Убедитесь, что во время выполнения вашего искрового задания вы передаете флаг -file с файлом пути log4j.properties
    3. Если он по-прежнему не работает, у вас может быть банка с параметрами log4j.properties, которые вызывается перед новыми log4j.properties. Удалите это log4j.properties из jar (если необходимо)
     sparkContext.setLogLevel("OFF") 

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

    Spark использует slf4j для привязки к регистраторам. Если log4j не является первой найденной привязкой, вы можете редактировать файлы log4j.properties все, что хотите, регистраторы даже не используются. Например, это может быть возможным выходом SLF4J:

    SLF4J: путь classа содержит несколько привязок SLF4J. SLF4J: найденное связывание в [jar: файл: / C: /Users/~/.m2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar! / Org / slf4j / impl / StaticLoggerBinder.class] SLF4J: найдено привязку в [jar: файл: / C: /Users/~/.m2/repository/org/slf4j/slf4j-log4j12/1.7.19/slf4j-log4j12-1.7.19.jar ! /org/slf4j/impl/StaticLoggerBinder.class] SLF4J: см. http://www.slf4j.org/codes.html#multiple_bindings для объяснения. SLF4J: Фактическое связывание имеет тип [org.slf4j.impl.SimpleLoggerFactory]

    Итак, здесь использовался SimpleLoggerFactory, который не заботится о настройках log4j.

    Исключая пакет slf4j-simple из моего проекта через

      ...  ...  slf4j-simple org.slf4j    

    разрешила проблему, так как теперь используется привязка log4j logger и соблюдается любая настройка в log4j.properties. FYI мой файл свойств 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.root.logger здесь) из файла log4j.properties. Надеюсь, это поможет, ура!

    Interesting Posts

    Измените устройство вывода звука в Firefox

    Сделайте аккорд USB-накопителя, как компакт-диск

    Лучший способ обнаружить выпускную сборку из сборки отладки? .сеть

    Mac Air Bootcamp Установка Windows 7 и USB3 Препятствия

    Как войти в Windows 7 в качестве администратора

    Проблемы с настройками по умолчанию

    Эмпирически определить категорию значений выражения C ++ 11?

    Уникальный ключ с первым кодом EF

    У меня есть доменное имя, которое я хочу перенаправить на локальный сервер. Как мне это сделать?

    Vim: применить настройки к файлам в каталоге

    Обработчик исключений .NET Global в консольном приложении

    Как узнать, что у моей беспроводной карты включена инъекция?

    Почему AngularJS включает в себя пустую опцию?

    Как я могу десериализовать объект, если он был перемещен в другой пакет или переименован?

    Зачем использовать явно бессмысленные инструкции do-while и if-else в макросах?

    Давайте будем гением компьютера.