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