我想调试一个mapreduce脚本,并且没有遇到太多麻烦试图在我的程序中放置一些print语句.但我似乎无法在任何日志中找到它们.
其实标准输出只显示System.out.println()
了的非映射精简类.
将System.out.println()
在地图和减少阶段可以在日志中可以看出.访问日志的简便方法是
http:// localhost:50030/jobtracker.jsp- >单击已完成的作业 - >单击地图或缩小任务 - >单击任务日志 - >任务日志 - >标准日志.
希望这可以帮助
另一种方式是通过终端:
1)进入Hadoop_Installtion目录,然后进入"logs/userlogs".
2)打开您的job_id目录.
3)如果你想要mapper输出或,用_ 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_:map任务,"地图编号":_000000_
4)开放标准输出,如果你使用"的System.out.println"或标准错误,如果你使用"system.err.append".
PS.其他hadoop版本可能有不同的层次结构,但它们都应该在$ Hadoop_Installtion/logs/userlogs下.
在Hadoop集群上yarn
,您可以使用以下命令获取日志,包括stdout:
yarn logs -applicationId application_1383601692319_0008
出于某种原因,我发现这比我在网络界面中看到的更完整.Web界面没有System.out.println()
为我列出输出.
要在控制台上获取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); } }