Comment se connecter à l'aide de log4j de système de fichiers local à l'intérieur d'une Étincelle application qui s'exécute sur le FIL?
Je suis en train de construire un Apache Spark Streaming demande et qui ne peuvent pas se connecter à un fichier sur le système de fichiers local lors de l'exécution sur le FILS. Comment peuvent-ils y parvenir?
J'ai mis log4.properties
fichier de sorte qu'il peut réussir à écrire dans un fichier journal dans /tmp
répertoire du système de fichiers local (voir ci-dessous partiellement):
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=/tmp/application.log
log4j.appender.file.append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Quand je lance mon application Spark localement à l'aide de la commande suivante:
spark-submit --class myModule.myClass --master local[2] --deploy-mode client myApp.jar
Il fonctionne très bien et je peux voir que les messages du journal sont écrits à /tmp/application.log
sur mon système de fichiers local.
Mais quand je lance la même demande par le biais de FILS, par exemple,
spark-submit --class myModule.myClass --master yarn-client --name "myModule" --total-executor-cores 1 --executor-memory 1g myApp.jar
ou
spark-submit --class myModule.myClass --master yarn-cluster --name "myModule" --total-executor-cores 1 --executor-memory 1g myApp.jar
Je ne vois aucune /tmp/application.log
sur le système de fichiers local de la machine sur laquelle tourne le FIL.
Ce qui me manque.
- J'ai juste collé à votre section de log4j.propriétés et il a couru localement de façon similaire à la vôtre, mais ce n'est pas la création de tout fichier journal pour mon /tmp. ai-je raté quelque chose?
- J'ai trouvé ce post utile- stackoverflow.com/questions/27781187/...
Vous devez vous connecter pour publier un commentaire.
[Édité pour éviter la confusion]
Il semble que vous devez ajouter à la JVM arguments utilisés lors du lancement de vos tâches/travaux.
Essayez de modifier
conf/spark-defaults.conf
comme décrit iciSinon essayez de modifier
conf/spark-env.sh
comme décrit ici pour ajouter le même argument JVM, bien que les entrées dans conf/spark-valeurs par défaut.conf devrait fonctionner.Si vous n'obtenez toujours pas toute la joie, vous pouvez transmettre explicitement l'emplacement de votre log4j.les propriétés de fichier sur la ligne de commande avec votre
spark-submit
comme cela si le fichier est contenu dans votre fichier JAR et dans le répertoire racine de votre classpathSi le fichier n'est pas sur votre classpath utiliser le
file:
le préfixe et le chemin d'accès complet comme cespark-defaults.conf
, et puis aussi ai eu de travail en utilisantspark-submit --conf
. Soit l'un ou l'autre devrait fonctionner (vous ne devriez pas avoir à la fois)=file:/apps/
sont le référencement d'un chemin absolu sur le disque et non dans un fichier sur le chemin de classe ou dans le POTspark-submit --files "./log4j.properties" ...
où log4j.propriétés réside dans le répertoire à partir duquel vous exécutez cette commande. Les propriétés de fichier sera envoyé pour le Conducteur et les ExécuteursLes options ci-dessus de la spécification de la log4j.en utilisant les propriétés de l'étincelle.exécuteur testamentaire.extraJavaOptions, étincelle.le pilote.extraJavaOptions serait ouvrir une session localement et aussi la log4.les propriétés doivent être présents localement sur chaque nœud.
Comme spécifié dans le https://spark.apache.org/docs/1.2.1/running-on-yarn.html de la documentation, vous pouvez également télécharger log4j.propriétés le long de avec votre application à l'aide de --option fichiers. Ce serait faire le fil d'agrégation de journalisation sur HDFS et vous pouvez accéder au journal de l'aide de la commande
1) Pour déboguer comment Spark sur le FILS est l'interprétation de votre log4j paramètres, utilisez
log4j.debug
drapeau.2) Étincelle va créer 2 types de FILS de conteneurs, le pilote et le travailleur. Si vous voulez partager un fichier à partir d'où vous présentez votre demande avec tous les conteneurs (vous ne pouvez pas utiliser un fichier à l'intérieur du POT, car ce n'est pas le POT qui tourne vraiment), vous devez donc utiliser le
--files
Étincelle soumettre la directive (ce qui permettra de partager des fichiers avec tous les travailleurs).Comme ceci:
Où log4j.propriétés d'un fichier de projet à l'intérieur de
src/main/resources/config
dossier.Je peux voir dans la console:
Si le fichier est pris en compte, vous pouvez vérifier sur la Spark webUI trop.
Alternativement, vous pouvez utiliser PropertyConfigurator de log4j à définir votre journal personnalisé propriétés.
Ex.
Votre fichier de propriétés sont les suivantes accessoires,
EDIT: mise à Jour lien de log4j docs. Spark utilise log4j 2, pas v1.2
Ref : http://logging.apache.org/log4j/2.x/
En vous log4j.les propriétés de fichier, vous devez également modifier le
log4j.rootCategory
deINFO,console
àINFO,file
.