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

181

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

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

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

Vishwas
источник

Ответы:

168

Отредактируйте ваш 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

Подробности о каждом можно найти в документации.

AkhlD
источник
15
Я думаю, что OFF слишком ограничен. ПРЕДУПРЕЖДЕНИЕ или ОШИБКА могут подходить лучше здесь.
Snowindy
2
Добавьте это в свои проекты Main class.
Ахл
2
Отличный ответ. Любой способ сделать то же самое из PySpark программно?
Тагар
2
Программная часть этого не работает. Вместо этого посмотрите этот ответ от @cantdutchthis stackoverflow.com/a/37836847/1056563
Джавадба
1
Кто этот @AkhlD?
Авиад Кляйн
151

Сразу после запуска spark-shellтип;

sc.setLogLevel("ERROR")

В Spark 2.0 (Scala):

spark = SparkSession.builder.getOrCreate()
spark.sparkContext.setLogLevel("ERROR")

Документы API: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

Для Java:

spark = SparkSession.builder.getOrCreate();
spark.sparkContext().setLogLevel("ERROR");
cantdutchthis
источник
Как бы вы установили это свойство в программе?
Алекс Радж Калиамурти
Это только avaibale для spark.sql.SparkSession или также avaibale для JavaSparkContext ??
SharpLu
Да, это доступно для JavaSparkContext . Спасибо, @cantdutchthis. Это беспокоило меня некоторое время.
алан
1
Это единственный ответ, который работал для меня без создания отдельного log4j. Спасибо!
abhihello123
2
Это работает для меня, однако я все еще получаю пару сообщений в начале моего теста. Любая идея?
46

Спасибо @AkhlD и @Sachin Janani за предложения об изменениях в .confфайле.

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

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

2) Добавлена ​​следующая строка после создания объекта контекста искры, т.е. после val sc = new SparkContext(conf):

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Vishwas
источник
12
Пробовал это, но все еще получаю результаты регистрации.
horatio1701d
1
Мне нравится это решение, поскольку у меня нет разрешения на доступ к conf /
Джим Хо
31

Используйте следующую команду, чтобы изменить уровень журнала при отправке приложения с использованием 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хранится файл конфигурации.

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>

Переключитесь на FileAppender в 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>

Еще одна важная вещь, которую следует понимать здесь: когда задание запускается в распределенном режиме (кластер режима развертывания и мастер в виде пряжи или мезо), файл конфигурации log4j должен существовать на узлах драйвера и рабочего ( log4j.configuration=file:<file path>/log4j.xml), иначе log4j init будет жаловаться

log4j: ОШИБКА Не удалось прочитать файл конфигурации [log4j.properties]. java.io.FileNotFoundException: log4j.properties (такого файла или каталога нет)

Намек на решение этой проблемы

Сохраните файл конфигурации log4j в распределенной файловой системе (HDFS или mesos) и добавьте внешнюю конфигурацию, используя log4j PropertyConfigurator . или используйте sparkContext addFile, чтобы сделать его доступным на каждом узле, затем используйте log4j PropertyConfigurator, чтобы перезагрузить конфигурацию.

Рахул Шарма
источник
2
Это один из немногих примеров, который не забивает все orgжурналы, которые традиционно взяты из стандартного регистратора.
углубление
1
Это работает очень хорошо, но для чего нужен Log4j.propertiesфайл? Кажется, он не используется. Вы просто документируете свойства, установленные в файле XML?
vy32
1
Вы можете использовать любой из них.
Рахул Шарма
3
У меня был успех с вышеупомянутым - я использую --filesв команде spark-submit, чтобы сделать log4j.properties доступным на всех узлах.
Бен Уотсон
1
Это единственное решение, которое сработало для меня, и оно не связано с изменением кода. Создать файл Log4.propertiesподmain/resources в случае, если он не существует
Yeikel
30

Все методы собраны с примерами

вступление

На самом деле, есть много способов сделать это . Некоторые из них сложнее других, но вам решать, какой из них подходит вам больше всего. Я постараюсь продемонстрировать их все.


# 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 classpath Spark Cluster имеет приоритет над classpath приложения! Вот почему размещение этого файла в вашем fat-jar не отменит настройки кластера!

Добавить -Dlog4j.configuration=<location of configuration file>в spark.driver.extraJavaOptions (для водителя) или
spark.executor.extraJavaOptions (для исполнителей) .

Обратите внимание, что при использовании файла file:протокол должен быть явно указан, и файл должен существовать локально на всех узлах .

Чтобы выполнить последнее условие, вы можете либо загрузить файл в место, доступное для узлов (например hdfs), либо получить к нему локальный доступ с помощью драйвера, если используетеdeploy-mode client . В противном случае:

загрузить пользовательский log4j.propertiesс помощью spark-submit, добавив его в--files список файлов, которые будут загружены с приложением.

Источник: Документация Spark, Отладка

шаги:

Пример 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режим. Spark Docs, среда выполнения

Выполнение 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"

Ноты:

  1. Файлы, загруженные с spark-clusterпомощью, --filesбудут доступны в корневом каталоге, поэтому нет необходимости добавлять какой-либо путь в file:log4j.properties.
  2. Файлы в списке --filesдолжны быть указаны с абсолютным путем!
  3. file: префикс в конфигурации URI является обязательным.

# 3 Редактировать кластеры conf/log4j.properties

Это изменяет файл конфигурации глобальной регистрации .

обновите $SPARK_CONF_DIR/log4j.propertiesфайл, и он будет автоматически загружен вместе с другими конфигурациями.

Источник: Документация Spark, Отладка

Чтобы найти свой, 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, и т.д. ) из этого каталога.

Источник: Spark Docs, Конфигурация

шаги:

  1. Копировать кластеры conf папку (подробнее, метод № 3)
  2. редактировать log4j.properties в этой папке (пример в методе № 2)
  3. Установите 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"
    

Вывод

Я не уверен, есть ли какой-либо другой метод, но я надеюсь, что это охватывает тему от А до Я. Если нет, не стесняйтесь пинговать меня в комментариях!

Приятного пути!

Atais
источник
Это должен быть принятый ответ. Он предлагает много деталей и суммирует гораздо больше вариантов использования, чем другие. (Не поощряя отключать журналы.)
Бельгацея
@Atais - Вы должны добавить ниже. Итак, если вы похожи на меня и обнаружите, что приведенные выше ответы не помогли, то, возможно, вам тоже придется удалить суффикс «.template» из файла conf log4j, и тогда вышеприведенное работает отлично!
однодневные
1
Дополнительное примечание о программном подходе - уровень должен быть установлен до создания SparkContext
Arunraj Nair
@ArunrajNair не должно быть так, потому что регистрация - это отдельная функция, не связанная с SparkContext.
Atais
19

Вы устанавливаете отключение журналов, устанавливая его уровень на OFF следующим образом:

Logger.getLogger("org").setLevel(Level.OFF);
Logger.getLogger("akka").setLevel(Level.OFF);

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

log4j.rootCategory=OFF, console
Сачин Джанани
источник
В каком файле я устанавливаю вышеуказанные свойства ??
Вишвас
Вы можете добавить эти строки в свою программу Driver @Vishwas
Sachin Janani
Я добавил то же самое, но все еще логи появляются на консоли
Vishwas
Вы изменили свойство log4j.rootCategory = OFF. Я проверил их на своем конце, и он работает нормально
Sachin Janani
3
Это не имеет
никакого
15

Я просто добавляю эту строку ко всем моим сценариям pyspark сверху чуть ниже операторов import.

SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

пример заголовка моих скриптов pyspark

from pyspark.sql import SparkSession, functions as fs
SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")
Гаджендра Д Амби
источник
13
Это работает, но не останавливает 58 строк сообщений INFO, которые появляются во время создания контекста Spark.
vy32
1
Обратите внимание, что это для Spark 2.x
Yeikel
13

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

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

Так что если вы похожи на меня и обнаружите, что приведенные выше ответы не помогли, то, возможно, вам тоже придется удалить суффикс «.template» из файла conf log4j, и тогда вышеприведенное работает отлично!

http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html

curtisp
источник
Пожалуйста, проверьте этот ответ, stackoverflow.com/a/51554118/2094086 надеюсь, что вы ищете то же самое.
Гаурав Адуркар
5

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

Анупам Махапатра
источник
Я хотел бы найти программный способ, который не работает с файлом log4j, но когда я пытаюсь это сделать, я все равно получаю предупреждения, такие как WARN org.apache.spark.scheduler.TaskSetManager: Потерянное задание 612.1 на этапе 0.0 (TID 2570 ..., исполнитель 15): TaskKilled (другое внимание
MrCartoonology
5

ТЛ; др

Для Spark Context вы можете использовать:

sc.setLogLevel(<logLevel>)

где loglevelможет быть ВСЕ, ОТЛАДКА, ОШИБКА, 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

Справка: Освоение искры от Яцека Ласковского.

Ани Менон
источник
3

Просто сделать в командной строке ...

spark2-submit --driver-java-options="-Droot.logger=ERROR,console" ..другие варианты..

1472580
источник
что такое spark2-submit?
vy32
spark2-submit используется для Spark2.
Нефилим
3

Просто добавьте следующий параметр к вашей команде spark-shell ИЛИ spark-submit

--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"

Проверьте точное имя свойства (log4jspark.root.logger здесь) из файла log4j.properties. Надеюсь, это поможет, ура!

Гаурав Адуркар
источник
1
Установить это из командной строки было бы здорово. Но это не сработало для меня.
swdev
2

Интересная идея состоит в том, чтобы использовать 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
marilena.oita
источник
0
  1. Настройте conf / log4j.properties, как описано в другом log4j.rootCategory = ОШИБКА, консоль
  2. Убедитесь, что во время выполнения задания spark вы передаете флаг --file с путем к файлу log4j.properties
  3. Если он все еще не работает, у вас может быть jar с log4j.properties, который вызывается перед вашими новыми log4j.properties. Удалите этот log4j.properties из jar (если необходимо)
Просеять
источник
0
sparkContext.setLogLevel("OFF")
Искусство
источник
1
Я сделал и то и другое - удалил суффикс .template из log4j.properties и установил уровень на ERROR, и val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR) это сработало
Sam-T
0

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

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

SLF4J: путь к классу содержит несколько привязок SLF4J. SLF4J: Обнаружена привязка в [jar: file: / C: /Users/~/.m2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar! / Org / slf4j / impl / StaticLoggerBinder.class] SLF4J: найдена привязка в [jar: file: / 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 из моего проекта через

<dependency>
        ...
        <exclusions>
            ...
            <exclusion>
                <artifactId>slf4j-simple</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>

решена проблема, так как теперь используется привязка логгера log4j и все настройки в log4j.properties соблюдаются. К сведению, мой файл свойств 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

Надеюсь это поможет!

daniel.wirtz
источник
0

Этот работал для меня. Только для сообщений об ошибках, которые отображаются как stdout, log4j.propertiesфайл может выглядеть следующим образом:

# Root logger option
log4j.rootLogger=ERROR, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

ПРИМЕЧАНИЕ. Положите log4j.propertiesфайл в src/main/resourcesпапку, чтобы он действовал. И если log4j.propertiesего не существует (имеется в виду sparkиспользование log4j-defaults.propertiesфайла), вы можете создать его, перейдя к SPARK_HOME/confи затем, mv log4j.properties.template log4j.propertiesа затем продолжить вышеуказанные изменения.

RPaul
источник
0

Если у вас нет возможности редактировать код Java, чтобы вставить .setLogLevel()операторы, и вы не хотите развертывать еще больше внешних файлов, вы можете использовать метод грубой силы, чтобы решить эту проблему. Просто отфильтруйте строки INFO, используя grep.

spark-submit --deploy-mode client --master local <rest-of-cmd> | grep -v -F "INFO"
swdev
источник
0

Если кто-то еще застрял на этом,

ничего из вышеперечисленного не помогло мне. Я должен был удалить

implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.3"
implementation group: 'com.typesafe.scala-logging', name: "scala-logging_$scalaVersion", version: '3.9.2'

из моего build.gradle для журналов, чтобы исчезнуть. TLDR: не импортируйте какие-либо другие фреймворки журналирования, все будет хорошо, просто используяorg.apache.log4j.Logger

Falco Winkler
источник
0

Еще один способ полной остановки бревен:

    import org.apache.log4j.Appender;
    import org.apache.log4j.BasicConfigurator;
    import org.apache.log4j.varia.NullAppender;

    public class SomeClass {

        public static void main(String[] args) {
            Appender nullAppender = new NullAppender();
            BasicConfigurator.configure(nullAppender);

            {...more code here...}

        }
    }

Это сработало для меня. NullAppender является

Appender, который игнорирует события журнала. ( https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html )

Гэндальф
источник