业务背景
MapReduce编程模型的线上调试并不方便,它不像本地Java程序那样可以很方便地及时看到输出结果,本文将提供一种比较简捷的方式对MapReduce Job进行调试。
分析
完全并行模式下的MapReduce Job,使用
System.out.println(“xxx”);
并不会打印到控制台上,因为完全并行模式下的MR Job是分布在集群上各个TaskTracker节点上运行的,因此,使用System.out.println的结果,是将打印信息打印到实际运行的Slave节点上的
如何在TaskTracker节点上查看打印信息
如下一段代码来自MapReduce Job:
…for (PmsPageTpaModel e : pmsPageTpaList) {if (e.getPageTypeId() == referPageTypeId&& e.getTpa().equals(tpa)) {// —— debug info ———————–System.out.println(“DebugInfo : “+ e.getPageTypeId() + “, “+ e.getTpa() + “, “+ e.getAlgorithmId());// —— debug info ———————–return e.getAlgorithmId();}}…
执行上面的Job,等待执行完毕以后,进入JobTracker页面
因为上面的程序代码是在Reduce端进行的,所以点击“Reduce”,进入后可以看到Reduce端的所有TaskTracker节点
选择一个TaskTracker节点进去
然后点击logs,,查看TaskTracker节点的日志信息
结论
完全并行模式的MR模型,可以借助JobTracker页面,结合
System.out.println(“xxx”);
在 已经运行完成的Job的 TaskTracker节点上查看打印信息。
在乎的是沿途的风景以及看风景的心情,让心灵去旅行!