5

MapReduce ジョブにログインするための最良の方法を見つけようとしています。他の Java アプリケーションと同様に、log4j アペンダーで slf4j を使用していますが、MapReduce ジョブはクラスター全体に分散して実行されるため、アクセスが制限された共有クラスターであるため、ログ ファイルの場所をどこに設定すればよいかわかりません。特権。

ジョブの完了後にクラスター全体のログを簡単に確認できるように、MapReduce ジョブにログインするための標準的な方法はありますか?

4

2 に答える 2

8

Hadoop が使用するデフォルトのロギング フレームワークである log4j を使用できます。したがって、MapReduce アプリケーションから次のようなことができます。

import org.apache.log4j.Logger;
// other imports omitted

public class SampleMapper extends Mapper<LongWritable, Text, Text, Text> {
    private Logger logger = Logger.getLogger(SampleMapper.class);

    @Override
    protected void setup(Context context) {
        logger.info("Initializing NoSQL Connection.")
        try {
            // logic for connecting to NoSQL - ommitted
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        }
    }

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // mapper code ommitted
    }
}        

このサンプル コードでは、log4j ロガーを使用して、継承された Mapper ロガーにイベントを記録します。すべてのログ イベントは、それぞれのタスク ログに記録されます。JobTracker(MRv1)/ResourceManager(MRv2) Web ページからタスク ログにアクセスできます。

yarnを使用している場合は、次のコマンドを使用してコマンド ラインからアプリケーション ログにアクセスできます。

yarn logs -applicationId <application_id>

一方、 mapreduce v1を使用している場合、コマンド ラインからの単一アクセス ポイントはありません。したがって、各 TaskTracker にログインし、構成されたパスを調べる必要があります。一般に、 contains log4j 出力/var/log/hadoop/userlogs/attempt_<job_id>/syslogで指定されています。${hadoop.log.dir}/userlogs

于 2015-01-24T09:20:24.213 に答える