hadoop mapreduce框架在哪里发送我的System.out.print()语句? (标准输出)

时间:2010-07-08 19:34:00

标签: hadoop mapreduce

我想调试一个mapreduce脚本,并且没有遇到太多麻烦试图在我的程序中放入一些打印语句。但我似乎无法在任何日志中找到它们。

4 个答案:

答案 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);
    }
}