Я установил Spark с помощью руководства AWS EC2, и я могу нормально запустить программу, используя bin/pyspark
сценарий, чтобы добраться до подсказки искры, а также могу успешно выполнить Quick Start quide.
Однако, хоть убей, я не могу понять, как остановить подробное INFO
ведение журнала после каждой команды.
Я пробовал почти все возможные сценарии в приведенном ниже коде (закомментировал, установил значение OFF) в моем log4j.properties
файле в 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
:
Команда Spark: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java -cp: /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.jar -XX: MaxPermSize = 128m -Djava.library.path = -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark. ответ.
содержание 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"
Ответы:
Просто выполните эту команду в каталоге 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
от:
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, регистрируемых для моего теста с 2647 до 163. Однако создание самого SparkContext регистрирует 163, вплоть до
15/08/25 10:14:16 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0
и мне непонятно, как их настроить программно.
источник
В Spark 2.0 вы также можете динамически настроить его для своего приложения с помощью setLogLevel :
from pyspark.sql import SparkSession spark = SparkSession.builder.\ master('local').\ appName('foo').\ getOrCreate() spark.sparkContext.setLogLevel('WARN')
В консоли pyspark
spark
уже будет доступен сеанс по умолчанию .источник
log4j
недоступен.Отредактируйте файл 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)
После этого вы не увидите никаких журналов.
источник
>>> log4j = sc._jvm.org.apache.log4j >>> log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)
источник
Для PySpark вы также можете установить уровень журнала в своих скриптах с помощью
sc.setLogLevel("FATAL")
. Из документов :источник
Вы можете использовать setLogLevel
val spark = SparkSession .builder() .config("spark.master", "local[1]") .appName("TestLog") .getOrCreate() spark.sparkContext.setLogLevel("WARN")
источник
Это может быть связано с тем, как Spark вычисляет свой путь к классам. Я подозреваю, что
log4j.properties
файл Hadoop появляется перед 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
.источник
Spark 1.6.2:
Spark 2.x:
spark.sparkContext.setLogLevel('WARN')
(искра - это SparkSession)
В качестве альтернативы старым методам,
Переименовать ,
conf/log4j.properties.template
чтобыconf/log4j.properties
в Спарк Dir.В
log4j.properties
изменитеlog4j.rootCategory=INFO, console
наlog4j.rootCategory=WARN, console
Доступны различные уровни журнала:
источник
Программный способ
spark.sparkContext.setLogLevel("WARN")
Доступные Варианты
ERROR WARN INFO
источник
Я использовал это с Amazon EC2 с 1 главным и 2 подчиненными устройствами и 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/
источник
Просто добавьте параметр ниже в свою команду spark-submit
--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"
Это временно отменяет системное значение только для этого задания. Проверьте точное имя свойства (здесь log4jspark.root.logger) в файле log4j.properties.
Надеюсь, это поможет, ура!
источник
--conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/home/foobar/log4j.properties
Этот фрагмент кода ниже для пользователей scala:
Опция 1 :
Ниже фрагмент вы можете добавить на уровне файла
import org.apache.log4j.{Level, Logger} Logger.getLogger("org").setLevel(Level.WARN)
Вариант 2:
import org.apache.spark.sql.SparkSession private[this] implicit val spark = SparkSession.builder().master("local[*]").getOrCreate() spark.sparkContext.setLogLevel("WARN")
Вариант 3:
log4j.rootCategory=ERROR, console
источник
Я делаю это так:
в том месте, где я запускаю
spark-submit
сценарий, сделайтеизмените
INFO
любой уровень ведения журнала, который вы хотите, а затем запустите свойspark-submit
источник
cp /etc/spark/conf/log4j.properties.template .
Если вы хотите продолжать использовать ведение журнала (средство ведения журнала для Python), вы можете попробовать разделить конфигурации для вашего приложения и для Spark:
LoggerManager() logger = logging.getLogger(__name__) loggerSpark = logging.getLogger('py4j') loggerSpark.setLevel('WARNING')
источник