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.
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
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.
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.
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);
}
}