web-dev-qa-db-ja.com

hadoopのlog4j.propertiesをオーバーライドする

Hadoopのデフォルトのlog4j.propertiesをオーバーライドするにはどうすればよいですか? hadoop.root.logger = WARN、consoleを設定すると、コンソールにログが出力されませんが、ログファイルにINFOを出力しないのが望ましいです。 jarにlog4j.propertiesファイルを追加しましたが、デフォルトのファイルを上書きできません。つまり、ログファイルにエラーと警告のみを出力させたいのです。

# 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

デフォルトのLog4j.propertiesファイルを使用する場合、ロギング設定は起動スクリプトの環境変数によって上書きされます。デフォルトのlog4jを使用し、ログレベルを変更するだけの場合は、$HADOOP_CONF_DIR/hadoop-env.shを使用します。

たとえば、ロガーをDEBUGログレベルとDRFAロガーに変更するには、次のコマンドを使用します。

export HADOOP_ROOT_LOGGER="DEBUG,DRFA"
8
Daniel
  1. log4j.propertieshadoop jarから削除できます
  2. または、jar/log4j.propertiesがクラスパスの最初にあることを確認してください(log4jは、見つかったクラスパスから最初のlog4j.propertiesを選択します)
  3. またはシステム変数を指定します:-Dlog4j.configuration=PATH_TO_FILE

Log4jが構成を見つける方法については、 ドキュメント を参照してください。

6
oers

log4j内のHADOOP_CONF_DIRファイルを変更します。 hadoopジョブはアプリケーションのlog4jファイルを考慮しないことに注意してください。 HADOOP_CONF_DIR内のものを考慮します。

Hadoopに他のlog4jファイルを強制的に使用させたい場合は、次のいずれかを試してください。

  1. @Patriceの発言を試すことができます。すなわち。

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

  2. HADOOP_CONF_DIR/log4j.xmlをカスタマイズし、希望に応じて「自分の」クラスのロガーレベルを設定します。他のユーザーは、両方が同じパッケージ構造のクラスを持たない限り、このため影響を受けません。すべてのユーザーが影響を受けるため、これはコアのhadoopクラスでは機能しません。

  3. カスタマイズしたlog4jファイルを作成します。ディレクトリHADOOP_CONF_DIRを複製し、その中にlog4jファイルを置きます。 HADOOP_CONF_DIRをconfディレクトリにエクスポートします。他のユーザーはデフォルトのユーザーをポイントします。

6
Tejas Patil

Mavenパッケージ:

カスタムを追加する必要があることに気付いたら、debug-log.propertiesファイルをsrc/main/Java/resourcesに追加し、Mavenがそれをapplication.jarルートディレクトリに追加した後、それを参照するかどうかだけで-Dlog4j.configuration=debug-log.propertiesコマンドラインから。

Oozie <Java>アクション:

Oozieについては、<Java-opts>-Dlog4j.configuration=${log4jConfig}</Java-opts>をworkflow.xmlアクションで指定し、job.propertiesファイルで以下を定義します。

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

Oozie <map-reduce>アクション:

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

同じ問題に直面しました(CDH3U3、Hadoop 0.20.2)。 (ノートfile:パスの接頭辞):

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

スルファが述べたように、hadoop 1.2.1の場合、hadoop-core.jar内にあるtask-log4j.propertiesをオーバーライドすることが重要です。

私の疑似分散モードでは、

豚のUDFのデバッグメッセージを出力できず、hadoop-core.jarからtask-log4j.propertiesを削除して、$ HADOOP_INSTALL/conf/log4j.propertiesのコピーで置き換える必要がありました。

使用した

Zip -d hadoop-core-1.2.1.jar task-log4j.properties #to delete

そして

Zip -g hadoop-core-1.2.1.jar task-log4j.properties #to add back 
2
deba

Jarファイル内にすでに構成済みのlog4jプロパティファイルがある場合。 -classpathの前に-Dlog4j.configuration =を置くだけでオーバーライドできます

ここにサンプルがあります:

Java -Dlog4j.configuration = ..\conf\log4j.properties -classpath%CLASSPATH%

0
user2460204

Log4j.configurationオプションを配置in子Javaオプション。

つまり.

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

/home/yourname/log4j_debug.propertiesや/tmp/log4j_debug.propertiesなどの同じディレクトリパスのすべてのスレーブサーバーにlog4j_debug.propertiesファイルを配置する必要があります

この設定はmapred.child.Java.opts設定を上書きします。 -Xmx32m(32MBヒープサイズを意味する)などの別のオプションを使用する場合は、次のようにします。

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

Hadoop 1.2.1には2つの構成ファイルがあります。log4j.propertiesとtask-log4j.propertiesしたがって、上記の例を機能させるには、log4jではなくtask-log4j.propertiesで変更を行う必要があります。プロパティ

task-log4j.propertiesに次の行を追加できます。

log4j.logger.org.xxx=WARN
0
sulpha