web-dev-qa-db-fra.com

remplacer log4j.properties dans hadoop

Comment puis-je remplacer les valeurs par défaut log4j.properties dans Hadoop? Si je définis le hadoop.root.logger = avertissement, la console, il n'imprime pas les journaux sur la console, alors que ce que je veux, c'est qu'il ne devrait pas imprimer les informations dans le fichier journaux. J'ai ajouté un fichier log4j.properties dans mon jar, mais je ne suis pas en mesure de remplacer le par défaut. En bref, je veux que le fichier journal n'imprime que les erreurs et les avertissements.

# Define some default values that can be overridden by system properties
hadoop.root.logger=INFO,console
hadoop.log.dir=.
hadoop.log.file=hadoop.log

#
# Job Summary Appender 
#
# Use following logger to send summary to separate file defined by 
# hadoop.mapreduce.jobsummary.log.file rolled daily:
# hadoop.mapreduce.jobsummary.logger=INFO,JSA
# 
hadoop.mapreduce.jobsummary.logger=${hadoop.root.logger}
hadoop.mapreduce.jobsummary.log.file=hadoop-mapreduce.jobsummary.log

# Define the root logger to the system property "hadoop.root.logger".
log4j.rootLogger=${hadoop.root.logger}, EventCounter

# Logging Threshold
log4j.threshold=ALL

#
# Daily Rolling File Appender
#

log4j.appender.DRFA=org.Apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.Apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
# Debugging Pattern format
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n


#
# console
# Add "console" to rootlogger above if you want to use this 
#

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{2}: %m%n

#
# TaskLog Appender
#

#Default values
hadoop.tasklog.taskid=null
hadoop.tasklog.iscleanup=false
hadoop.tasklog.noKeepSplits=4
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12

log4j.appender.TLA=org.Apache.hadoop.mapred.TaskLogAppender
log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
log4j.appender.TLA.isCleanup=${hadoop.tasklog.iscleanup}
log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}

log4j.appender.TLA.layout=org.Apache.log4j.PatternLayout
log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

#
#Security appender
#
hadoop.security.log.file=SecurityAuth.audit
log4j.appender.DRFAS=org.Apache.log4j.DailyRollingFileAppender 
log4j.appender.DRFAS.File=${hadoop.log.dir}/${hadoop.security.log.file}

log4j.appender.DRFAS.layout=org.Apache.log4j.PatternLayout
log4j.appender.DRFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
#new logger
# Define some default values that can be overridden by system properties
hadoop.security.logger=INFO,console
log4j.category.SecurityLogger=${hadoop.security.logger}

#
# Rolling File Appender
#

#log4j.appender.RFA=org.Apache.log4j.RollingFileAppender
#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}

# Logfile size and and 30-day backups
#log4j.appender.RFA.MaxFileSize=1MB
#log4j.appender.RFA.MaxBackupIndex=30

#log4j.appender.RFA.layout=org.Apache.log4j.PatternLayout
#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n

#
# FSNamesystem Audit logging
# All audit events are logged at INFO level
#
log4j.logger.org.Apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=WARN

# Custom Logging levels

#log4j.logger.org.Apache.hadoop.mapred.JobTracker=DEBUG
#log4j.logger.org.Apache.hadoop.mapred.TaskTracker=DEBUG
#log4j.logger.org.Apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=DEBUG

# Jets3t library
log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR

#
# Event Counter Appender
# Sends counts of logging messages at different severity levels to Hadoop Metrics.
#
log4j.appender.EventCounter=org.Apache.hadoop.metrics.jvm.EventCounter

#
# Job Summary Appender
#
log4j.appender.JSA=org.Apache.log4j.DailyRollingFileAppender
log4j.appender.JSA.File=${hadoop.log.dir}/${hadoop.mapreduce.jobsummary.log.file}
log4j.appender.JSA.layout=org.Apache.log4j.PatternLayout
log4j.appender.JSA.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
log4j.appender.JSA.DatePattern=.yyyy-MM-dd
log4j.logger.org.Apache.hadoop.mapred.JobInProgress$JobSummary=${hadoop.mapreduce.jobsummary.logger}
log4j.additivity.org.Apache.hadoop.mapred.JobInProgress$JobSummary=false

#
# MapReduce Audit Log Appender
#

# Set the MapReduce audit log filename
#hadoop.mapreduce.audit.log.file=hadoop-mapreduce.audit.log

# Appender for AuditLogger.
# Requires the following system properties to be set
#    - hadoop.log.dir (Hadoop Log directory)
#    - hadoop.mapreduce.audit.log.file (MapReduce audit log filename)

#log4j.logger.org.Apache.hadoop.mapred.AuditLogger=INFO,MRAUDIT
#log4j.additivity.org.Apache.hadoop.mapred.AuditLogger=false
#log4j.appender.MRAUDIT=org.Apache.log4j.DailyRollingFileAppender
#log4j.appender.MRAUDIT.File=${hadoop.log.dir}/${hadoop.mapreduce.audit.log.file}
#log4j.appender.MRAUDIT.DatePattern=.yyyy-MM-dd
#log4j.appender.MRAUDIT.layout=org.Apache.log4j.PatternLayout
#log4j.appender.MRAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
15
RFT

Si vous utilisez le fichier Log4JJ.Properties par défaut, les paramètres de journalisation sont remplacés par des variables d'environnement à partir du script de démarrage. Si vous souhaitez utiliser le log4J par défaut et souhaitez simplement modifier le niveau de journalisation, utilisez $HADOOP_CONF_DIR/hadoop-env.sh

Par exemple, pour modifier votre enregistreur au niveau du journal de débogage et de l'enregistreur DRAFA, utilisez

export HADOOP_ROOT_LOGGER="DEBUG,DRFA"
8
Daniel
  1. Vous pouvez supprimer le log4j.properties de ton hadoop jar
  2. Ou assurez-vous que votre jar/log4j.properties est d'abord dans la classe de classe (log4J choisit le premier log4j.properties de la classe de classe qu'il trouve)
  3. Ou spécifier la variable système: -Dlog4j.configuration=PATH_TO_FILE

Voir la Documentation pour savoir comment log4J trouve la configuration.

6
oers

Modifier le log4j Fichier à l'intérieur HADOOP_CONF_DIR. Notez que le travail Hadoop ne considérera pas le fichier log4j de votre application. Il considérera celui à l'intérieur HADOOP_CONF_DIR.

Si vous voulez forcer Hadoop à utiliser un autre log4j Fichier, essayez-en un:

  1. Vous pouvez essayer ce que @patrice a dit. c'est à dire.

    -Dlog4j.configuration = fichier: /path/to/user_specific/log4j.xml

  2. Personnaliser hadoop_conf_dir/log4j.xml et définissez le niveau d'enregistrement pour "vos" classes selon votre souhait. Les autres utilisateurs ne seront pas concernés en raison de ceux-ci, sauf si les deux sont des classes avec la même structure de paquet. Cela ne fonctionnera pas pour les classes de noyau Hadoop, car tous les utilisateurs seront affectés.

  3. Créez votre fichier log4j personnalisé. Repliquer le répertoire Hadoop_Conf_Dir et mettre votre fichier log4j à l'intérieur. Exporter hadoop_conf_dir sur votre annuaire de conf. Les autres utilisateurs vont pointer sur le par défaut.

6
Tejas Patil

emballage maven :

Une fois que j'ai réalisé que je devais ajouter ma personnalisation debug-log.properties Fichier à SRC/Main/Java/Ressources, Maven l'a ajouté au répertoire racine de l'application.jar, puis il s'agissait simplement d'y se référant ou non de -Dlog4j.configuration=debug-log.properties de la ligne de commande.

Oozie <Java> Action :

En ce qui concerne Oozie, utilisez <Java-opts>-Dlog4j.configuration=${log4jConfig}</Java-opts> Dans les actions de Workflow.xml et définissez les éléments suivants dans un fichier job.Properties.

#one of the following log4j.config parameters must be defined 
#log4jConfig=log4j.properties
log4jConfig=debug-log.properties

Oozie <map-reduce> Action :

 <property>
      <name>mapred.child.Java.opts</name>
      <value>-Dlog4j.configuration=${log4jConfig}</value>
 </property> 
3
Robert of Fairfax

J'ai été confronté au même problème (CDH3U3, hadoop 0.20.2). J'ai finalement trouvé une solution avec (note file: préfixe sur le chemin):

-Dlog4j.configuration=file:/path/to/user_specific/log4j.xml
3
Patrice

S'il y a déjà configuré le fichier de propriétés log4j dans le fichier JAR. Vous pouvez remplacer par simple puting -dlog4j.configuration = avant le -classpath

voici l'échantillon:

Java -dlog4j.configuration = ..\Conf\log4j.properties -ClassPath% de classePath%

0
user2460204

Mettez l'option log4j.configuration IN l'enfant Java options.

C'est à dire.

hadoop jar ... -Dmapred.child.Java.opts=-Dlog4j.configuration=file:/...../log4j_debug.properties

Vous devez mettre le fichier log4j_debug.properties sur tous les serveurs esclaves dans un même chemin de répertoire comme /home/yourname/log4j_debug.properties ou /tmp/log4j_debug.properties

Ce paramètre écrase les paramètres mapred.child.java.ops. Si vous souhaitez utiliser avec d'autres options telles que -XMX32M, ce qui signifie une taille de 32 Mo de tas, puis faites comme suit:

hadoop jar ... -Dmapred.child.Java.opts='-Xmx32m -Dlog4j.configuration=file:/...../log4j_debug.properties'
0
Haruyasu Ueda

Dans le hadoop 1.2.1 Il existe 2 fichiers de configuration: log4j.properties et Task-log4j.properties afin de faire l'exemple ci-dessus, le changement doit être effectué dans Task-log4j.properties non dans Log4J. Propriétés

vous pouvez ajouter une ligne Follwing dans votre tâche-log4j.properties:

log4j.logger.org.xxx=WARN
0
sulpha