TL; DR est-il possible de supprimer les messages de journalisation Spark individuels sans les écraser? toute la journalisation?Suppression de messages de journalisation Spark spécifiques
Je suis en cours d'exécution d'un travail Spark en streaming sur DME, et de recevoir des messages de journalisation comme:
17/08/17 21:09:00 INFO TaskSetManager: Finished task 101.0 in stage 5259.0 (TID 315581) in 17 ms on ip-172-31-37-216.ec2.internal (107/120) 17/08/17 21:09:00 INFO MapPartitionsRDD: Removing RDD 31559 from persistence list 17/08/17 21:09:00 INFO DAGScheduler: Job 2629 finished: foreachPartition at StreamingSparkJob.scala:52, took 0.080085 s 17/08/17 21:09:00 INFO DAGScheduler: ResultStage 5259 (foreachPartition at StreamingSparkJob.scala:52) finished in 0.077 s 17/08/17 21:09:00 INFO JobScheduler: Total delay: 0.178 s for time 1503004140000 ms (execution: 0.084 s)
Aucun qui est utile, à ce stade de développement, et qui masque réelle exploitation forestière cela est délibérément émis par ma demande. Je voudrais empêcher Spark d'émettre ces messages ou de supprimer leur enregistrement.
AWS Customer Support, et diverses réponses (e.g.) suggèrent que cela peut être réalisé en passant une certaine configuration JSON sur la création de cluster. Cependant, comme il s'agit d'un travail de streaming (pour lequel le cluster devrait, idéalement, rester éternel et simplement redéployé), j'aimerais trouver un moyen de le configurer via les options spark-submit
.
Autres réponses (e.g., e.g.) suggèrent que cela peut se faire en soumettant un fichier log4j.properties
qui définit log4j.rootCategory=WARN, <appender>
. Cependant, this link suggère que rootCategory
est la même chose que rootLogger
, donc j'interpréteraient cela comme limitant tous l'exploitation forestière (pas seulement Spark de) à WARN
- et, en fait, quand je déployé un changement faisant cela, ce fut ce qui a été observé.
Je note que le dernier paragraphe de here dit « Spark utilise log4j pour l'enregistrement. Vous pouvez le configurer en ajoutant un fichier log4j.properties
dans le répertoire conf
. Une façon de commencer est de copier le log4j.properties.template
existant situé là. » . Je suis sur le point d'expérimenter avec ceci pour voir si ceci supprimera les logs INFO
qui remplissent notre notation. Cependant, ce n'est toujours pas une solution idéale, car il y a des journaux que Spark émet qui sont utiles - par exemple, quand il enregistre le nombre de fichiers qui ont été ramassés (à partir de S3) par chaque itération de flux. Alors, ce que je ferais idéalement comme serait l'un des:
- drapeaux de configuration qui peuvent être activées pour désactiver classes spécifiques des messages de journalisation Spark, sans supprimer tous les
INFO
journaux - A « supprimer toute exploitation forestière qui correspond à cette option "regex", que nous pouvons mettre à jour comme il convient pour filtrer les messages qui ne nous intéressent pas
L'un de ces éléments existe-t-il?
(Pour répondre à une réponse possible - je suis peu disposé à émettre que les journaux de ma propre application à WARN
et au-dessus)
Merci!Je ne savais pas que vous pouviez définir différents niveaux de journalisation au niveau du package, et vos exemples m'ont aidé à remarquer que les messages de journalisation incluaient le nom de la classe dans leur préambule. – scubbo