我想调试一个mapreduce脚本,并且没有遇到太多麻烦试图在我的程序中放入一些打印语句。但我似乎无法在任何日志中找到它们。
答案 0 :(得分:58)
实际上,stdout只显示非地图缩小类的System.out.println()
。
可以在日志中看到地图和减少阶段的System.out.println()
。访问日志的简便方法是
http://localhost:50030/jobtracker.jsp->点击已完成的作业 - >点击地图或缩小任务 - >点击任务日志 - >任务日志 - > stdout日志。
希望这有帮助
答案 1 :(得分:24)
另一种方式是通过终端:
1)进入 Hadoop_Installtion 目录,然后进入“logs / userlogs”。
2)打开 job_id 目录
3)如果您想要映射器输出或 _r_ ,请使用 _ m _ 检查目录如果你正在寻找减速器。
示例:在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)如果使用“system.er.print”,则使用“system.out.println”或 stderr 打开 stdout
PS。其他hadoop版本可能有不同的层次结构,但它们都应该在$ Hadoop_Installtion / logs / userlogs下。
答案 2 :(得分:14)
在具有yarn
的Hadoop群集上,您可以使用以下命令获取日志,包括stdout:
yarn logs -applicationId application_1383601692319_0008
出于某种原因,我发现这比我在网络界面中看到的更完整。 Web界面没有为我列出System.out.println()
的输出。
答案 3 :(得分:8)
要在控制台上获取stdout和日志消息,您可以将apache commons日志框架用于mapper和reducer。
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);
}
}