Toutes les méthodes recueillies avec des exemples
Intro
En fait, il existe de nombreuses façons de le faire . Certains sont plus difficiles par rapport aux autres, mais c'est à vous de décider lequel vous convient le mieux. Je vais essayer de tous les présenter.
# 1 par programme dans votre application
Cela semble être le plus simple, mais vous devrez recompiler votre application pour modifier ces paramètres. Personnellement, je n'aime pas ça mais ça marche bien.
Exemple:
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)
Vous pouvez réaliser bien plus simplement en utilisant l' log4j
API.
Source: [ Docs de configuration Log4J , section Configuration]
# 2 Passe log4j.properties
pendantspark-submit
Celui-ci est très délicat, mais pas impossible. Et mon préféré.
Log4J au démarrage de l'application recherche et charge toujours le log4j.properties
fichier à partir du chemin de classe.
Cependant, lorsque vous utilisez spark-submit
le chemin de classe de Spark Cluster a la priorité sur le chemin de classe de l'application! C'est pourquoi mettre ce fichier dans votre fat-jar ne remplacera pas les paramètres du cluster!
Ajouter -Dlog4j.configuration=<location of configuration file>
à
spark.driver.extraJavaOptions
(pour le pilote) ou
spark.executor.extraJavaOptions
(pour les exécuteurs) .
Notez que si vous utilisez un fichier, le file:
protocole doit être explicitement fourni et le fichier doit exister localement sur tous les nœuds .
Pour satisfaire la dernière condition, vous pouvez soit télécharger le fichier à l'emplacement disponible pour les nœuds (comme hdfs
), soit y accéder localement avec le pilote si vous utilisez deploy-mode client
. Autrement:
télécharger une personnalisation à l' log4j.properties
aide de spark-submit, en l'ajoutant à la --files
liste des fichiers à télécharger avec l'application.
Source: documentation Spark, débogage
Pas:
Exemple 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
Exécution spark-submit
, pour le mode 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"
Notez que vous devez utiliser --driver-java-options
si vous utilisez client
mode. Documents Spark, environnement d'exécution
Exécution spark-submit
, pour le mode 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"
Remarques:
- Les fichiers téléchargés vers
spark-cluster
avec --files
seront disponibles dans le répertoire racine, il n'est donc pas nécessaire d'ajouter un chemin dans file:log4j.properties
.
- Les fichiers répertoriés dans
--files
doivent être fournis avec un chemin absolu!
file:
le préfixe dans l'URI de configuration est obligatoire.
# 3 Modifier les clusters conf/log4j.properties
Cela modifie le fichier de configuration de la journalisation globale .
mettez à jour le $SPARK_CONF_DIR/log4j.properties
fichier et il sera automatiquement téléchargé avec les autres configurations.
Source: documentation Spark, débogage
Pour trouver votre, SPARK_CONF_DIR
vous pouvez utiliser 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
Maintenant, modifiez simplement /var/lib/spark/latest/conf/log4j.properties
(avec l'exemple de la méthode n ° 2) et toutes vos applications partageront cette configuration.
# 4 Remplacer le répertoire de configuration
Si vous aimez la solution n ° 3, mais que vous souhaitez la personnaliser par application, vous pouvez en fait copier le conf
dossier, en modifier le contenu et le spécifier comme configuration racine pendant spark-submit
.
Pour spécifier un répertoire de configuration différent de celui par défaut “SPARK_HOME/conf”
, vous pouvez définir SPARK_CONF_DIR
. Spark utilisera les fichiers de configuration ( spark-defaults.conf
, spark-env.sh
, log4j.properties
, etc. ) à partir de ce répertoire.
Source: documentation Spark, configuration
Pas:
- Copier le
conf
dossier du cluster (plus d'informations, méthode n ° 3)
- Modifier
log4j.properties
dans ce dossier (exemple dans la méthode n ° 2)
Définissez SPARK_CONF_DIR
ce dossier, avant d'exécuter spark-submit
, par
exemple:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Conclusion
Je ne sais pas s'il existe une autre méthode, mais j'espère que cela couvre le sujet de A à Z. Sinon, n'hésitez pas à me cingler dans les commentaires!
Profitez de votre chemin!