web-dev-qa-db-ja.com

hadoop mapreduceフレームワークはSystem.out.print()ステートメントをどこに送信しますか? (標準出力)

Mapreduceスクリプトをデバッグしたいのですが、多くのトラブルを起こすことなく、プログラムにprintステートメントを入れようとしました。しかし、私はログのいずれかでそれらを見つけることができないようです。

52
jason

実際には、stdoutはnon-map reduceクラスのSystem.out.println()のみを表示します。

MapフェーズとreduceフェーズのSystem.out.println()は、ログで確認できます。ログにアクセスする簡単な方法は

http:// localhost:50030/jobtracker.jsp- >完了したジョブをクリックします->マップをクリックするかタスクを減らします->タスク番号をクリックします->タスクログ- > stdoutログ。

お役に立てれば

58
rOrlig

別の方法は、ターミナルを使用することです。

1) Hadoop_Installtionディレクトリに移動し、次に"logs/userlogs"に移動します。
2) job_idディレクトリを開きます。
3) マッパー出力が必要な場合は_ m_でディレクトリを確認し、レデューサーを探している場合は_ r _でディレクトリを確認します。

:Hadoop-20.2.0の場合:

> ls〜/ hadoop-0.20.2/logs/userlogs/attempt_201209031127_0002_m_000000_0 /
 log.index stderr stdout syslog 

上記の意味:
Hadoop_Installation:〜/ hadoop-0.20.2
job_id:job_201209031127_0002
_ m_:マップタスク、「マップ番号」:_000000_

4) open stdout "system.out.println"を使用した場合、またはstderr "system.err.append"を使用した場合。

PS。他のhadoopバージョンは、視覚的に異なる階層を持つかもしれませんが、それらはすべて$ Hadoop_Installtion/logs/userlogsの下にある必要があります。

24
Mark

yarnを含むHadoopクラスターでは、stdoutを含むログを次のように取得できます。

_yarn logs -applicationId application_1383601692319_0008
_

何らかの理由で、これがWebインターフェイスで表示されるものよりも完全であることがわかりました。 Webインターフェースは、System.out.println()の出力をリストしませんでした。

14
MacFreek

コンソールでstdoutとログメッセージを取得するには、Apache commonsのロギングフレームワークをマッパーとリデューサーに使用できます。

public class MyMapper extends Mapper<..,...,..,...> {

    public static final Log log = LogFactory.getLog(MyMapper.class)

    public void map() throws Exception{
        // Log to stdout file
        System.out.println("Map key "+ key);

        //log to the syslog file
        log.info("Map key "+ key);

        if(log.isDebugEanbled()){
            log.debug("Map key "+ key);
        }

        context.write(key,value);
    }
}
8
Rajkumar Singh