Alle Methoden mit Beispielen gesammelt
Intro
Tatsächlich gibt es viele Möglichkeiten, dies zu tun . Einige sind schwerer als andere, aber es liegt an Ihnen, welches am besten zu Ihnen passt. Ich werde versuchen, sie alle zu präsentieren.
# 1 Programmatisch in Ihrer App
Scheint am einfachsten zu sein, aber Sie müssen Ihre App neu kompilieren, um diese Einstellungen zu ändern. Persönlich mag ich es nicht, aber es funktioniert gut.
Beispiel:
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)
Mit der log4j
API können Sie viel mehr erreichen .
Quelle: [ Log4J-Konfigurationsdokumente , Konfigurationsabschnitt]
# 2 Pass log4j.properties
währendspark-submit
Dieser ist sehr knifflig, aber nicht unmöglich. Und mein Favorit.
Log4J sucht und lädt beim Starten der App immer eine log4j.properties
Datei aus dem Klassenpfad.
Bei Verwendung von spark-submit
Spark Cluster hat der Klassenpfad jedoch Vorrang vor dem Klassenpfad der App! Aus diesem Grund überschreibt das Einfügen dieser Datei in Ihr Fat-Jar die Einstellungen des Clusters nicht!
Hinzufügen -Dlog4j.configuration=<location of configuration file>
zu
spark.driver.extraJavaOptions
(für den Treiber) oder
spark.executor.extraJavaOptions
(für Ausführende) .
Beachten Sie, dass bei Verwendung einer Datei das file:
Protokoll explizit angegeben werden sollte und die Datei lokal auf allen Knoten vorhanden sein muss .
Um die letzte Bedingung zu erfüllen, können Sie die Datei entweder an den für die Knoten verfügbaren Speicherort (wie hdfs
) hochladen oder bei Verwendung lokal mit dem Treiber darauf zugreifen deploy-mode client
. Andernfalls:
Laden Sie eine benutzerdefinierte Datei log4j.properties
mit spark-submit hoch, indem Sie sie zur --files
Liste der Dateien hinzufügen, die mit der Anwendung hochgeladen werden sollen.
Quelle: Spark-Dokumente, Debugging
Schritte:
Beispiel 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
Ausführen spark-submit
für den Cluster-Modus:
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"
Beachten Sie, dass Sie verwenden müssen, --driver-java-options
wenn Sie den client
Modus verwenden. Spark-Dokumente, Runtime env
Ausführen spark-submit
für den Client-Modus:
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"
Anmerkungen:
- Dateien, die
spark-cluster
mit hochgeladen wurden, --files
sind im Stammverzeichnis verfügbar, sodass kein Pfad hinzugefügt werden muss file:log4j.properties
.
- Die in aufgeführten Dateien
--files
müssen mit einem absoluten Pfad versehen sein!
file:
Das Präfix im Konfigurations-URI ist obligatorisch.
# 3 Cluster bearbeiten conf/log4j.properties
Dadurch wird die Konfigurationsdatei für die globale Protokollierung geändert .
Aktualisieren Sie die $SPARK_CONF_DIR/log4j.properties
Datei und sie wird automatisch zusammen mit den anderen Konfigurationen hochgeladen.
Quelle: Spark-Dokumente, Debugging
Um Ihre zu finden, können SPARK_CONF_DIR
Sie verwenden 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
Bearbeiten Sie jetzt einfach /var/lib/spark/latest/conf/log4j.properties
(mit Beispiel aus Methode 2) und alle Ihre Apps teilen diese Konfiguration.
# 4 Konfigurationsverzeichnis überschreiben
Wenn Ihnen die Lösung Nr. 3 gefällt, Sie sie jedoch pro Anwendung anpassen möchten, können Sie den conf
Ordner tatsächlich kopieren , den Inhalt bearbeiten und währenddessen die Stammkonfiguration angeben spark-submit
.
Um ein anderes als das Standardkonfigurationsverzeichnis anzugeben “SPARK_HOME/conf”
, können Sie festlegen SPARK_CONF_DIR
. Spark verwenden , um die Konfigurationsdateien ( spark-defaults.conf
, spark-env.sh
, log4j.properties
, usw. ) aus diesem Verzeichnis.
Quelle: Spark-Dokumente, Konfiguration
Schritte:
- Kopieren Sie den
conf
Ordner des Clusters (weitere Informationen, Methode 3).
log4j.properties
In diesem Ordner bearbeiten (Beispiel in Methode 2)
Stellen Sie SPARK_CONF_DIR
in diesem Ordner, vor der Ausführung spark-submit
,
zB:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Fazit
Ich bin mir nicht sicher, ob es eine andere Methode gibt, aber ich hoffe, dass dies das Thema von A bis Z abdeckt. Wenn nicht, können Sie mich gerne in den Kommentaren anpingen!
Genieße deinen Weg!