2010-05-14 143 views
7

我尝试使用System.out.println()打印输出值,但它们不会出现在控制台上。如何使用Hadoop打印出map/reduce应用程序中的值以进行调试?调试hadoop应用程序

感谢, 迪帕克。

+1

这里指的https://stackoverflow.com/questions/23235343/debugging -hadoop-in-eclipse – Mash 2015-07-28 10:29:27

回答

5

页@SquareCog点是一个很好的信息源上调试MapReduce工作,一旦你运行它在云上。

在你达到这一点,虽然你应该考虑为你的映射器和减压器编写单元测试,这样你就可以验证的基本逻辑工作。如果您对单元测试感兴趣,可以测试您的地图并减少逻辑,请检查mrunit,它的工作方式与JUnit类似。

+1

嗯,我指的那个页面是关于MRUnut的谈话:)但是肯定的。 – SquareCog 2010-05-17 21:19:41

+0

@SquareCog - 我的坏,我只是假设我知道你链接到哪个页面。它是一个很好的信息来源:+) – 2010-05-18 03:41:01

3

我想补充一点,您可以使用CountersHadoop JavaDoc进行调试。例如。如果你想检查,你的程序中的特定行通过的频率。

0

System.out.println不直接指向终端,而是写入日志文件。日志文件默认位于Hadoop目录中。所以你可以输入终端 cat /hadoop-homedirectory/logs/userlogs/jobID/attemptID/stdout 你也可以通过网页界面进入。输入ip:50070/logs/userlogs。

0

如果使用MRUnit & ApprovalTests是很容易打印出图的过程中减少工作。 有一个关于它在这里的视频:

HadoopApprovals.verifyMapReduce(new WordCountMapper(), 
          new WordCountReducer(), 0, "cat cat dog"); 

时会产生输出http://t.co/leExFVrf

例如代码:

[cat cat dog] 
-> maps via WordCountMapper to -> 
(cat, 1) 
(cat, 1) 
(dog, 1) 

-> reduces via WordCountReducer to -> 
(cat, 2) 
(dog, 1)