Как отключить регистрацию информации в Spark?


Я установил Spark с помощью руководства AWS EC2, и я могу запустить программу отлично, используя bin/pyspark скрипт, чтобы добраться до подсказки spark, а также может успешно выполнить Quick Start quide.

однако, я не могу для жизни меня выяснить, как остановить все многословные INFO журнал после каждой команды.

Я пробовал почти все возможные сценарии в приведенном ниже коде (комментируя, отключая) в моем на conf папка в которой я запустить приложение, а также на каждом узле и ничего не делать. Я все еще получаю журнал INFO печать инструкций после выполнения каждой инструкции.

Я очень смущен тем, как это должно работать.

#Set everything to be logged to the console log4j.rootCategory=INFO, 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.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

вот мой полный путь к классу, когда я использую SPARK_PRINT_LAUNCH_COMMAND:

Искра : / Library / Java/JavaVirtualMachines / jdk1.8.0_05.jdk / Contents / Home / bin / java -панель управления :/root/spark-1.0.1-bin-hadoop2/conf:/root/spark-1.0.1-bin-hadoop2/conf:/root/spark-1.0.1-bin-hadoop2/lib/spark-assembly-1.0.1-hadoop2.2.0.jar: / root / spark-1.0.1-bin-hadoop2/lib / datanucleus-api-jdo-3.2.1.jar: / root / spark-1.0.1-bin-hadoop2/lib / datanucleus-core-3.2.2.jar: / root / spark-1.0.1-bin-hadoop2/lib / datanucleus-rdbms-3.2.1.сосуд - XX: MaxPermSize=128m-Djava.библиотека.путь= -Xms512m -Xmx512m орг.апаш.искра.развертывать.SparkSubmit spark-shell --класс орг.апаш.искра.репл.Главное

содержание spark-env.sh:

#!/usr/bin/env bash

# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.

# Options read when launching programs locally with 
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# - SPARK_CLASSPATH=/root/spark-1.0.1-bin-hadoop2/conf/

# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_LIBRARY, to point to your libmesos.so if you use Mesos

# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.

# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers

export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
12 103

12 ответов:

просто выполните эту команду в каталоге spark:

cp conf/log4j.properties.template conf/log4j.properties

редактировать log4j. properties:

# Set everything to be logged to the console
log4j.rootCategory=INFO, 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

заменить в первой строке:

log4j.rootCategory=INFO, console

by:

log4j.rootCategory=WARN, console

сохранить и перезагрузить консоль. Он работает для меня для Spark 1.1.0 и Spark 1.5.1 на OS X.

вдохновленный pyspark/tests.py я сделал

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 )

вызов этого сразу после создания SparkContext уменьшил строки stderr, зарегистрированные для моего testfrom с 2647 до 163. Однако создание самого SparkContext регистрирует 163, до

15/08/25 10:14:16 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0

и мне не ясно, как настроить их программно.

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

   log4j.rootCategory=INFO, console

до

    log4j.rootCategory=ERROR, console

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

Fireup spark-shell и введите следующее:

import org.apache.log4j.Logger
import org.apache.log4j.Level

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

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

>>> log4j = sc._jvm.org.apache.log4j
>>> log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)

вы также можете установить уровень журнала в своих сценариях с помощью sc.setLogLevel("FATAL"). Из docs:

контролировать наш уровень. Это переопределяет любые пользовательские настройки журнала. Допустимые уровни журнала включают в себя: все, отладка, ошибка, фатальная, информация, скидка, проследить, предупредить

в Spark 2.0 вы также можете настроить его динамически для вашего приложения с помощью setLogLevel:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.\
        master('local').\
        appName('foo').\
        getOrCreate()
    spark.sparkContext.setLogLevel('WARN')

на pyspark

это может быть связано с тем, как Spark вычисляет свой путь к классам. Мое предчувствие, что Хадупа log4j.properties файл появляется перед Spark на пути к классам, предотвращая ваши изменения от вступления в силу.

если вы запустите

SPARK_PRINT_LAUNCH_COMMAND=1 bin/spark-shell

затем Spark напечатает полный путь к классу, используемый для запуска оболочки; в моем случае я вижу

Spark Command: /usr/lib/jvm/java/bin/java -cp :::/root/ephemeral-hdfs/conf:/root/spark/conf:/root/spark/lib/spark-assembly-1.0.0-hadoop1.0.4.jar:/root/spark/lib/datanucleus-api-jdo-3.2.1.jar:/root/spark/lib/datanucleus-core-3.2.2.jar:/root/spark/lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m -Djava.library.path=:/root/ephemeral-hdfs/lib/native/ -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark.repl.Main

здесь /root/ephemeral-hdfs/conf находится в начале пути к классам.

Я открыл проблема [SPARK-2913] чтобы исправить это следующий релиз (я должен иметь патч в ближайшее время).

в то же время, вот несколько решений:

  • добавить export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf" до spark-env.sh.
  • удалить (или переименовать) /root/ephemeral-hdfs/conf/log4j.properties.

я использовал это с Amazon EC2 с 1 master и 2 slaves и Spark 1.2.1.

# Step 1. Change config file on the master node
nano /root/ephemeral-hdfs/conf/log4j.properties

# Before
hadoop.root.logger=INFO,console
# After
hadoop.root.logger=WARN,console

# Step 2. Replicate this change to slaves
~/spark-ec2/copy-dir /root/ephemeral-hdfs/conf/

Искра 1.6.2:

log4j = sc._jvm.org.apache.log4j
log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)

Искра 2.x:

spark.sparkContext.setLogLevel('WARN')

(Искра является SparkSession)

в качестве альтернативы старые методы,

переименовать conf/log4j.properties.template до conf/log4j.properties in Spark реж.

на log4j.properties изменить log4j.rootCategory=INFO, console до log4j.rootCategory=WARN, console

доступны различные уровни журнала:

  • выкл (наиболее конкретно, без регистрации)
  • фатальный (наиболее конкретные, мало данных)
  • ERROR-Log только в случае Ошибки
  • WARN-Log только в случае предупреждений или ошибок
  • информация (по умолчанию)
  • DEBUG-Log details steps (и все журналы, указанные выше)
  • трассировка (наименее конкретная, много данных)
  • все (наименее конкретные, все данные)

то, как я это делаю:

в том месте, где я запустить spark-submit скрипт

$ cp /etc/spark/conf/log4j.properties .
$ nano log4j.properties

изменить INFO до какого уровня регистрации вы хотите, а затем запустите свой spark-submit

Я вы хотите продолжать использовать logging (Logging facility для Python) вы можете попробовать разделить конфигурации для вашего приложения и для Spark:

LoggerManager()
logger = logging.getLogger(__name__)
loggerSpark = logging.getLogger('py4j')
loggerSpark.setLevel('WARNING')

просто добавьте ниже param к вашей команде spark-submit

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

это временно переопределяет системное значение только для этого задания. Проверьте точное имя свойства (log4jspark.корень.logger здесь) из файла log4j.properties.

надеюсь, это поможет, ура!