hadoop mapreduce框架在哪里发送我的System.out.print()语句? (标准输出)
我想debugging一个mapreduce脚本,而且不用费太大力气把一些打印语句放到我的程序中。 但我似乎无法在任何日志中find他们。
实际上,stdout只显示了非映射reduce类的System.out.println()
。
在日志中可以看到map和reduce阶段的System.out.println()
。 访问日志的简单方法是
http:// localhost:50030 / jobtracker.jsp- >点击完成的作业 – >点击地图或减less任务 – >点击任务数量 – >任务日志 – >标准输出日志。
希望这可以帮助
另一种方式是通过terminal:
1)进入你的Hadoop_Installtion目录,然后进入“日志/用户日志” 。
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)打开标准 输出,如果您使用“system.out.println”或标准错误,如果您使用“system.err.append”。
PS。 其他hadoop版本可能会有不同的层次结构,但它们都应该在$ Hadoop_Installtion / logs / userlogs下。
在包含yarn
的Hadoop集群上,您可以使用以下命令获取日志,包括stdout:
yarn logs -applicationId application_1383601692319_0008
出于某种原因,我发现这比我在web界面中看到的更完整。 web界面没有列出System.out.println()
的输出。
要在控制台上获得你的标准输出和日志消息,你可以使用Apache公共日志logging框架到你的映射器和减速器。
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); } }