5

デバッグしたいマップ削減コードを書きました。

エラーが発生しない限り、Hadoop プラットフォームは標準出力を画面に出力しないため、標準出力を使用することはできません。

代わりに、ログファイルを作成するためにロガーを使用しようとしました。

ハンドラーを使用して2つのファイルに分割しましたが、残念ながら「重大な」ログファイルは空になり、一般的なログファイルはメインスレッドで発生したことのみをログに記録し、map reduce 関数では発生しませんでした。

質問は次のとおりです。

Hadoop とログ ファイルに問題がありますか、それともロガーの構成に問題がありますか? もしそうなら、それを修正する方法。

ログ構成コード: アプリケーション全体に 1 つのロガーを使用します (今回はルート ロガー)

public static Logger configureLogging() 
    {
        try
        {
            logger=Logger.getLogger("");
            //FileSystem hdfs=FileSystem.get(URI.create(Misc.S3FS),getConfiguration());
            logger.setLevel(Level.ALL);

            //StreamHandler handler=new StreamHandler(hdfs.create(new Path(Misc.LOGS_PATH+"mylog.log")),new SimpleFormatter());
            FileHandler handler=new FileHandler(Misc.LOGS_PATH+"mylog.xml",true);   
            FileHandler severeHandler=new FileHandler(Misc.LOGS_PATH+"mylogSevere.xml",true);
            severeHandler.setLevel(Level.INFO);
            logger.addHandler(handler);
            logger.addHandler(severeHandler);

        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return logger;

    }
4

1 に答える 1

7

Hadoop には、構成済みの log4j が付属しています。2 つのクラスをインポートするだけです。

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

これで、マッパー、リデューサー内、および必要な場所でロガーを定義できるようになりました。

private static final Log LOG = LogFactory.getLog(MyClass.class);

必要なものをログに記録します。

LOG.info("My message");

ジョブの実行中にメッセージが表示されます。log4j の設定を微調整できます

conf/log4j.properties
于 2012-09-16T14:21:20.253 に答える