Ich habe Spark mithilfe des AWS EC2-Handbuchs installiert und kann das Programm mithilfe des bin/pyspark
Skripts problemlos starten, um zur Spark-Eingabeaufforderung zu gelangen. Außerdem kann ich den Schnellstart erfolgreich ausführen.
Ich kann jedoch für mein ganzes Leben nicht herausfinden, wie die gesamte ausführliche INFO
Protokollierung nach jedem Befehl gestoppt werden kann .
Ich habe fast jedes mögliche Szenario im folgenden Code (Auskommentieren, Ausstellen auf AUS) in meiner log4j.properties
Datei in dem conf
Ordner ausprobiert, in dem ich die Anwendung starte, sowie auf jedem Knoten, und nichts tut etwas. INFO
Nach Ausführung jeder Anweisung werden die Protokollierungsanweisungen immer noch gedruckt.
Ich bin sehr verwirrt darüber, wie das funktionieren soll.
#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
Hier ist mein vollständiger Klassenpfad, wenn ich benutze SPARK_PRINT_LAUNCH_COMMAND
:
Spark-Befehl: /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
Inhalt von 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"
Antworten:
Führen Sie einfach diesen Befehl im Spark-Verzeichnis aus:
Bearbeiten Sie log4j.properties:
In der ersten Zeile ersetzen:
durch:
Speichern Sie Ihre Shell und starten Sie sie neu. Es funktioniert für mich unter Spark 1.1.0 und Spark 1.5.1 unter OS X.
quelle
Inspiriert von dem pyspark / tests.py, den ich gemacht habe
Wenn Sie dies direkt nach dem Erstellen von SparkContext aufrufen, werden die für meinen Test protokollierten stderr-Zeilen von 2647 auf 163 reduziert. Das Erstellen des SparkContext selbst protokolliert jedoch 163 bis zu
und mir ist nicht klar, wie ich diese programmgesteuert anpassen soll.
quelle
In Spark 2.0 können Sie es mit setLogLevel auch dynamisch für Ihre Anwendung konfigurieren :
In der pyspark- Konsole ist bereits eine Standardsitzung
spark
verfügbar.quelle
log4j
nicht zugänglich ist.Bearbeiten Sie Ihre Datei conf / log4j.properties und ändern Sie die folgende Zeile:
zu
Ein anderer Ansatz wäre:
Zünden Sie die Funkenschale an und geben Sie Folgendes ein:
Danach werden keine Protokolle mehr angezeigt.
quelle
quelle
Für PySpark können Sie auch die Protokollebene in Ihren Skripten mit festlegen
sc.setLogLevel("FATAL")
. Aus den Dokumenten :quelle
Sie können setLogLevel verwenden
quelle
Dies kann daran liegen, wie Spark seinen Klassenpfad berechnet. Meine Vermutung ist die von Hadoop
log4j.properties
Datei von im Klassenpfad vor der von Spark Ihre Änderungen nicht wirksam werden.Wenn du läufst
Dann druckt Spark den vollständigen Klassenpfad, der zum Starten der Shell verwendet wird. in meinem Fall verstehe ich
wo
/root/ephemeral-hdfs/conf
ist an der Spitze des Klassenpfades.Ich habe eine Ausgabe geöffnet [SPARK-2913] , um dieses in der nächsten Version zu beheben (ich sollte bald einen Patch veröffentlichen).
In der Zwischenzeit finden Sie hier einige Problemumgehungen:
export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
zuspark-env.sh
./root/ephemeral-hdfs/conf/log4j.properties
.quelle
Funke 1.6.2:
Spark 2.x:
(Funke ist die SparkSession)
Alternativ die alten Methoden,
Benennen Sie
conf/log4j.properties.template
zuconf/log4j.properties
Spark Dir.In der
log4j.properties
wechseln Sielog4j.rootCategory=INFO, console
zulog4j.rootCategory=WARN, console
Verschiedene Protokollebenen verfügbar:
quelle
Programmatischer Weg
Verfügbare Optionen
quelle
Ich habe dies mit Amazon EC2 mit 1 Master und 2 Slaves und Spark 1.2.1 verwendet.
quelle
Fügen Sie einfach den folgenden Parameter zu Ihrem Spark-Submit-Befehl hinzu
Dadurch wird der Systemwert nur für diesen Job vorübergehend überschrieben. Überprüfen Sie den genauen Eigenschaftsnamen (log4jspark.root.logger hier) aus der Datei log4j.properties.
Hoffe das hilft, Prost!
quelle
--conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/home/foobar/log4j.properties
Das folgende Code-Snippet für Scala-Benutzer:
Option 1 :
Unterhalb des Snippets können Sie auf Dateiebene hinzufügen
Option 2 :
Option 3:
quelle
Ich mache es so:
an dem Ort, an dem ich das
spark-submit
Skript ausführe, tunWechseln
INFO
Sie zu der gewünschten Protokollierungsstufe und führen Sie dann Ihre ausspark-submit
quelle
cp /etc/spark/conf/log4j.properties.template .
Wenn Sie weiterhin die Protokollierung (Protokollierungsfunktion für Python) verwenden möchten, können Sie versuchen, Konfigurationen für Ihre Anwendung und für Spark aufzuteilen:
quelle