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 log4jAPI können Sie viel mehr erreichen .
Quelle: [ Log4J-Konfigurationsdokumente , Konfigurationsabschnitt]
# 2 Pass log4j.propertieswä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.propertiesDatei aus dem Klassenpfad.
Bei Verwendung von spark-submitSpark 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.propertiesmit spark-submit hoch, indem Sie sie zur --filesListe 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-submitfü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-optionswenn Sie den clientModus verwenden. Spark-Dokumente, Runtime env
Ausführen spark-submitfü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-clustermit hochgeladen wurden, --filessind im Stammverzeichnis verfügbar, sodass kein Pfad hinzugefügt werden muss file:log4j.properties.
- Die in aufgeführten Dateien
--filesmü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.propertiesDatei und sie wird automatisch zusammen mit den anderen Konfigurationen hochgeladen.
Quelle: Spark-Dokumente, Debugging
Um Ihre zu finden, können SPARK_CONF_DIRSie 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 confOrdner 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
confOrdner des Clusters (weitere Informationen, Methode 3).
log4j.propertiesIn diesem Ordner bearbeiten (Beispiel in Methode 2)
Stellen Sie SPARK_CONF_DIRin 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!