2

Hadoop の Log4j インフラストラクチャを使用して、map/reduce アプリケーションからログを記録したいと考えています。すべてが正しくセットアップされたと思いますが、必要なログ レベルを指定できません。

デフォルトでは、Hadoop はレベルINFOでログを記録するように設定されています。その log4j.properties ファイルの最初の行は次のようになります。

hadoop.root.logger=INFO,console

レデューサーが次のようなアプリケーションがあります。

package com.test; public class MyReducer<...> extends Reducer<...> { private static Logger logger = Logger.getLogger(MyReducer.class.getName());
    //...    protected void reduce(...) {
       logger.debug("My message");
    //   ...    } }

Hadoop の log4j.properties ファイルに次の行を追加しました。

log4j.logger.com.test.MyReducer=DEBUG

Hadoop システムはレベル INFO でログを記録することを期待していますが、私のアプリケーションはレベル DEBUG でログを記録するため、リデューサー タスクのログに「My message」が表示されます。

4

1 に答える 1

0

クラスローダーは、変更したファイルよりも前に Hadoop jar から log4j.properties ファイルを見つけている可能性が高いため、変更は効果がありません。log4j.configuration次のようにシステム変数を定義することで、使用する log4j 構成ファイルを指定できます。

-Dlog4j.configuration=PATH_TO_FILE
于 2013-10-02T01:50:54.620 に答える