Я хочу отладить mapreduce script, и, не вдаваясь в дело, попытался поместить некоторые инструкции печати в свою программу. Но я не могу найти их в любом из журналов.
Где hasoop mapreduce framework отправляет мои инструкции System.out.print()? (Стандартный вывод)
Ответ 1
На самом деле stdout отображает только System.out.println()
классов не-карты.
System.out.println()
для фаз отображения и уменьшения можно увидеть в журналах. Легкий способ доступа к журналам -
http://localhost:50030/jobtracker.jsp- > щелкните по завершенному заданию- > щелкните по карте или уменьшите задачу- > щелкните по номеру задачи- > журналам задач- > stdout.
Надеюсь, что это поможет
Ответ 2
Другой способ - через терминал:
1) Войдите в свой каталог Hadoop_Installtion, а затем в "logs/userlogs".
2) Откройте каталог job_id.
3) Проверяйте каталоги с помощью _m_, если вы хотите, чтобы вывод mapper или _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) откройте stdout, если вы использовали "system.out.println" или stderr, если вы использовали "system.err.append".
PS. другие версии hadoop могут иметь различную иерархию зрения, но все они должны быть под $Hadoop_Installtion/logs/userlogs.
Ответ 3
В кластере Hadoop с yarn
вы можете получить журналы, в том числе stdout, с помощью
yarn logs -applicationId application_1383601692319_0008
По какой-то причине я нашел это более полным, чем то, что я вижу в webinterface. Веб-интерфейс не отображал вывод System.out.println()
для меня.
Ответ 4
чтобы получить ваше сообщение stdout и log на консоли, вы можете использовать фреймворк 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);
}
}