Tutti i metodi raccolti con esempi
Intro
In realtà, ci sono molti modi per farlo . Alcuni sono più difficili da altri, ma dipende da te quale ti si addice meglio. Proverò a mostrarli tutti.
# 1 A livello di codice nella tua app
Sembra essere il più semplice, ma dovrai ricompilare la tua app per modificare tali impostazioni. Personalmente, non mi piace ma funziona benissimo.
Esempio:
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)
Puoi ottenere molto di più semplicemente utilizzando l' log4j
API.
Fonte: [ Documenti di configurazione Log4J , sezione Configurazione]
# 2 Passa log4j.properties
durantespark-submit
Questo è molto complicato, ma non impossibile. E il mio preferito.
Log4J all'avvio dell'app cerca e carica sempre i log4j.properties
file dal percorso di classe.
Tuttavia, quando si utilizza spark-submit
il percorso di classe di Spark Cluster ha la precedenza sul percorso di classe dell'app! Questo è il motivo per cui mettere questo file nel tuo barattolo di grasso non sovrascriverà le impostazioni del cluster!
Aggiungi -Dlog4j.configuration=<location of configuration file>
a
spark.driver.extraJavaOptions
(per il driver) o
spark.executor.extraJavaOptions
(per gli esecutori) .
Se si utilizza un file, file:
è necessario fornire esplicitamente il protocollo e il file deve esistere localmente su tutti i nodi .
Per soddisfare l'ultima condizione, è possibile caricare il file nella posizione disponibile per i nodi (come hdfs
) o accedervi localmente con il driver se si utilizza deploy-mode client
. Altrimenti:
carica un custom log4j.properties
usando spark-submit, aggiungendolo --files
all'elenco dei file da caricare con l'applicazione.
Fonte: documenti Spark, debug
passi:
Esempio 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
In esecuzione spark-submit
, per la modalità cluster:
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"
Si noti che è necessario utilizzare --driver-java-options
se si utilizza la client
modalità.Spark docs, Runtime env
In esecuzione spark-submit
, per la modalità client:
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"
Appunti:
- File caricati in
spark-cluster
con--files
saranno disponibili nella directory principale, quindi non è necessario aggiungere alcun percorso file:log4j.properties
.
- I file elencati in
--files
devono essere forniti con percorso assoluto!
file:
il prefisso nell'URI di configurazione è obbligatorio.
# 3 Modifica i cluster conf/log4j.properties
Ciò modifica il file di configurazione della registrazione globale .
aggiorna il $SPARK_CONF_DIR/log4j.properties
file e verrà automaticamente caricato insieme alle altre configurazioni.
Fonte: documenti Spark, debug
Per trovare il SPARK_CONF_DIR
tuo puoi usare 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
Ora modifica /var/lib/spark/latest/conf/log4j.properties
(con l'esempio del metodo n. 2) e tutte le tue app condivideranno questa configurazione.
# 4 Sostituisci la directory di configurazione
Se ti piace la soluzione n. 3, ma desideri personalizzarla per applicazione, puoi effettivamente copiare la conf
cartella, modificarne il contenuto e specificare come configurazione root durante spark-submit
.
Per specificare una directory di configurazione diversa da quella predefinita “SPARK_HOME/conf”
, è possibile impostare SPARK_CONF_DIR
. Spark utilizzerà i file di configurazione ( spark-defaults.conf
, spark-env.sh
, log4j.properties
, ecc ) da questa directory.
Fonte: Spark docs, Configurazione
passi:
- Copia la
conf
cartella del cluster (ulteriori informazioni, metodo n. 3)
- Modifica
log4j.properties
in quella cartella (esempio nel metodo n. 2)
Impostare SPARK_CONF_DIR
su questa cartella, prima di eseguire spark-submit
,
esempio:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Conclusione
Non sono sicuro che ci sia un altro metodo, ma spero che questo copra l'argomento dalla A alla Z. Altrimenti, sentitevi liberi di chiamarmi nei commenti!
Buon divertimento!