2017-10-16 8 views
0

J'ai essayé de trouver une référence de toutes les propriétés log4j pour Spark et j'ai du mal à le trouver. J'ai trouvé beaucoup d'exemples où les gens ont vu des morceaux. Mais j'essaie de voir s'il y a une référence quelque part qui les a tous. Pour mon cas d'utilisation particulier, j'écris du code qui effectue une série de transformations de données en déclenchant un travail d'envoi d'étincelles, qui peut ensuite être utilisé/étendu par d'autres utilisateurs. Je n'ai pas besoin de la plupart de ce que l'étincelle crache par défaut et il est facile de simplement définir quelque chose comme log4j.rootLogger = WARN, stdout. Cependant, il y a quelques bits utiles dans INFO qu'il serait bon d'avoir imprimé à l'écran. En particulier:Existe-t-il une référence des propriétés de Spark Log4j?

org.apache.spark.deploy.yarn.Client (Logging.scala:logInfo(54)) - 
    client token: Token { kind: YARN_CLIENT_TOKEN, service: } 
    diagnostics: N/A 
    ApplicationMaster host: N/A 
    ApplicationMaster RPC port: -1 
    queue: **** 
    start time: 1508185983070 
    final status: UNDEFINED 
    tracking URL: ***My tracking URL*** 
    user: ***User*** 

Et encore plus spécifiquement l'URL de suivi. Probablement aussi un peu en raison de ma connaissance limitée de Log4j rend cela un peu difficile. J'ai essayé de faire quelque chose comme:

org.apache.spark.deploy.yarn.Client=Info 

Mais cela ne semble pas être une propriété d'enregistrement légitime. Y a-t-il un moyen d'obtenir seulement cette information dans Spark? Y at-il un truc pour voir toutes les propriétés de journalisation possibles à définir?

Merci!

Mise à jour

j'ai pu comprendre. La plupart de cela était dû au fait que je ne savais pas comment fonctionne log4j.properties, mais que j'ai maintenant une meilleure gestion.

Vous pouvez définir le logger et le niveau de consignation par classe, et ceux qui persistent jusqu'à toutes les classes enfants.

J'ai changé log4j.properties à ressembler à quelque chose comme ceci:

log4j.logger.org.apache.spark=INFO, RollingAppender 
log4j.additivity.org.apache.spark=false 
log4j.logger.org.apache.hadoop=INFO, RollingAppender 
log4j.additivity.org.apache.hadoop=false 
log4j.logger.org.spark_project.jetty=INFO, RollingAppender 
log4j.additivity.org.spark_project.jetty=false 
log4j.logger.org.apache.spark.deploy.yarn.Client=INFO, RollingAppender 
log4j.additivity.org.apache.spark.deploy.yarn.Client=false 

Et qui réoriente à peu près tous les Spark sur les journaux YARN dans un fichier (légèrement modifié à partir du lien Thiago partagé).

Les choses clés que je manque ...

1) je devais inclure log4j.logger.CLASS_NAME, je manque le bit log4j.logger ..

2) Nécessité d'avoir log4j. additivity.CLASS_NAME = false. Sans cela, il suffit de connecter INFO au réglage par défaut.

Il est assez déroutant au début, mais commence à faire un peu de sens une fois que vous obtenez le motif.

Répondre

0

Je vous suggère de jeter un coup d'oeil dans cet article à Hacker midi: https://hackernoon.com/how-to-log-in-apache-spark-f4204fad78a

Il est un peu plus complexe pour générer des journaux dans Spark si vous voulez générer vos propres journaux dans l'application de fil Spark Envoyer .

+0

Merci Thiago, c'est super utile. Un défi que je remarque déjà est que la journalisation est sortie vers la console à moins que je ne mette le logger racine. Il ne semble pas respecter les surcharges de journalisation de fichier pour tout le bruit d'étincelle. Une partie de ce problème concerne aussi le fil, et une partie du problème que je rencontre est de savoir quel paramètre de journal ajuster pour contrôler cela. Par exemple, "INFO org.apache.spark.deploy.yarn.Client" apparaît sur ma console. J'ai essayé de mettre quelque chose comme log4j.logger.org.apache.spark.deploy.yarn.Client = WARN et cela ne semble pas faire quoi que ce soit.Y a-t-il un moyen de lier cela? –