Zainstalowałem Sparka za pomocą przewodnika AWS EC2 i mogę poprawnie uruchomić program za pomocą bin/pyspark
skryptu, aby dostać się do podpowiedzi iskry, a także mogę pomyślnie wykonać przewodnik Szybki start.
Jednak do końca życia nie mogę wymyślić, jak zatrzymać wszystkie szczegółowe INFO
rejestrowanie po każdym poleceniu.
Wypróbowałem prawie każdy możliwy scenariusz w poniższym kodzie (komentowanie, ustawienie na OFF) w moim log4j.properties
pliku w conf
folderze, z którego uruchamiam aplikację, a także na każdym węźle i nic nie robi. Ciągle otrzymuję instrukcje logowania INFO
drukowane po wykonaniu każdej instrukcji.
Jestem bardzo zdezorientowany, jak to ma działać.
#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
Oto moja pełna ścieżka klas, kiedy używam SPARK_PRINT_LAUNCH_COMMAND
:
Spark Command: /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. repl.Main
zawartość 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"
Odpowiedzi:
Po prostu wykonaj to polecenie w katalogu Spark:
Edytuj log4j.properties:
Zastąp w pierwszym wierszu:
przez:
Zapisz i uruchom ponownie powłokę. U mnie działa w przypadku Spark 1.1.0 i Spark 1.5.1 na OS X.
źródło
Zainspirowany pyspark / tests.py, który zrobiłem
Wywołanie tego zaraz po utworzeniu SparkContext zmniejszyło liczbę wierszy stderr rejestrowanych dla mojego testu z 2647 do 163. Jednak samo utworzenie SparkContext rejestruje 163, aż do
i nie jest dla mnie jasne, jak dostosować je programowo.
źródło
W Spark 2.0 możesz również skonfigurować go dynamicznie dla swojej aplikacji za pomocą setLogLevel :
W konsoli pyspark domyślna
spark
sesja będzie już dostępna.źródło
log4j
nie jest dostępny.Edytuj plik conf / log4j.properties i zmień następujący wiersz:
do
Innym podejściem byłoby:
Odpal osłonę iskrową i wpisz:
Po tym nie zobaczysz żadnych dzienników.
źródło
źródło
W przypadku PySpark możesz również ustawić poziom logowania w swoich skryptach za pomocą
sc.setLogLevel("FATAL")
. Z dokumentów :źródło
Możesz użyć setLogLevel
źródło
Może to być spowodowane tym, jak Spark oblicza swoją ścieżkę klas. Moje przeczucie jest takie, że
log4j.properties
plik Hadoopa pojawia się przed Sparkiem na ścieżce klas, uniemożliwiając wprowadzenie zmian.Jeśli uciekniesz
następnie Spark wypisze pełną ścieżkę klasy używaną do uruchomienia powłoki; w moim przypadku rozumiem
gdzie
/root/ephemeral-hdfs/conf
jest na początku ścieżki klas.Otworzyłem problem [SPARK-2913], aby to naprawić w następnym wydaniu (wkrótce powinienem mieć łatkę).
Tymczasem oto kilka obejść:
export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
dospark-env.sh
./root/ephemeral-hdfs/conf/log4j.properties
.źródło
Spark 1.6.2:
Spark 2.x:
(iskra będąca SparkSession)
Alternatywnie stare metody,
Zmień nazwę
conf/log4j.properties.template
naconf/log4j.properties
w Spark Dir.W programie
log4j.properties
zmieńlog4j.rootCategory=INFO, console
nalog4j.rootCategory=WARN, console
Dostępne różne poziomy dziennika:
źródło
Sposób programowy
dostępne opcje
źródło
Użyłem tego z Amazon EC2 z 1 master i 2 slave i Spark 1.2.1.
źródło
Po prostu dodaj poniższy parametr do polecenia wysyłania iskry
To tymczasowo przesłania wartość systemową tylko dla tego zadania. Sprawdź dokładną nazwę właściwości (tutaj log4jspark.root.logger) z pliku log4j.properties.
Mam nadzieję, że to pomoże!
źródło
--conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/home/foobar/log4j.properties
Poniższy fragment kodu dla użytkowników Scala:
Opcja 1 :
Poniżej fragment możesz dodać na poziomie pliku
Opcja 2 :
Wariant 3:
źródło
Sposób, w jaki to robię, to:
w miejscu, w którym uruchamiam
spark-submit
skryptzmień
INFO
na dowolny poziom logowania, który chcesz, a następnie uruchomspark-submit
źródło
cp /etc/spark/conf/log4j.properties.template .
Jeśli chcesz nadal korzystać z logowania (narzędzia do rejestrowania dla Pythona), możesz spróbować podzielić konfiguracje dla swojej aplikacji i dla Sparka:
źródło