web-dev-qa-db-fra.com

Où le framework hadoop mapreduce envoie-t-il mes instructions System.out.print ()? (stdout)

Je veux déboguer un script mapreduce, et sans trop de difficultés j'ai essayé de mettre des instructions d'impression dans mon programme. Mais je ne peux pas les trouver dans aucun des journaux.

52
jason

En fait, stdout affiche uniquement la System.out.println() des classes non-map Reduce .

La System.out.println() pour les phases de mappage et de réduction peut être vue dans les journaux. Un moyen facile d'accéder aux journaux est

http: // localhost: 50030/jobtracker.jsp- > cliquez sur le travail terminé-> cliquez sur la carte ou réduisez la tâche-> cliquez sur numéro de tâche-> journaux des tâches-> journaux stdout .

J'espère que cela t'aides

58
rOrlig

Une autre façon est à travers le terminal:

1) Allez dans votre répertoire Hadoop_Installtion, puis dans "logs/userlogs".
2) Ouvrez votre répertoire job_id.
3) Vérifiez les répertoires avec _ m_ si vous voulez la sortie du mappeur ou _ r _ si vous cherchez des réducteurs.

Exemple: Dans Hadoop-20.2.0:

> ls ~/hadoop-0.20.2/logs/userlogs/try_201209031127_0002_m_000000_0 /
 log.index stderr stdout syslog 

Ce qui précède signifie:
Hadoop_Installation: ~/hadoop-0.20.2
id_travail: job_201209031127_0002
_ m_: tâche de mappage, "numéro de mappage": _000000_

4) open stdout si vous avez utilisé "system.out.println" ou stderr si vous avez utilisé "system.err.append".

PS. d'autres versions de hadoop peuvent avoir une hiérarchie différente mais elles doivent toutes être sous $ Hadoop_Installtion/logs/userlogs.

24
Mark

Sur un cluster Hadoop avec yarn, vous pouvez récupérer les journaux, y compris stdout, avec:

yarn logs -applicationId application_1383601692319_0008

Pour une raison quelconque, j'ai trouvé que c'était plus complet que ce que je vois dans l'interface Web. L'interface Web n'a pas répertorié la sortie de System.out.println() pour moi.

14
MacFreek

pour obtenir votre message de sortie et de journal sur la console, vous pouvez utiliser le cadre de connexion Apache commons dans votre mappeur et réducteur.

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