我该如何调试Hadoop map reduce

时间:2012-10-02 18:21:48

标签: java debugging logging hadoop mapreduce

我试图建立一个地图减少工作。

它运行完成但最后会显示奇怪的数据。

当我尝试使用system.out.println调试它时("调试数据") 它没有在屏幕上显示。

使用java API生成外部日志文件,尝试使用log.severe("日志数据")或使用log4j logger方法log.info(日志数据)打印到屏幕上/

在地图缩减作业中出现异常时,我看到调试消息的唯一时间没有效果。

如何修复它以便我可以在文件或屏幕上看到我的调试消息?

4 个答案:

答案 0 :(得分:3)

This answer可能有所帮助。 Hadoop为其自己的作业跟踪记录系统捕获System.out。

答案 1 :(得分:3)

您可以尝试Jumbune

从他们的指南:

  

Debugger提供MapReduce作业执行的代码级控制流统计信息。用户可以应用正则表达式验证或   用户定义的验证类。根据应用的验证,Flow Debugger检查输入数据元组的流   基本上为提交的作业中的每个映射器和reducer配对数据。

     

Jumbune提供了一个全面的表格/图表视图,描述了作业中输入记录的流程。流程是   显示在作业级别,MapReduce级别和实例级别。不匹配的键/值表示数量   通过作业意外流动键/值数据。调试器深入到代码中以检查数据流   各种计数器,如循环和if-conditions,else-if等等。

答案 2 :(得分:1)

由于您正在处理大数据,因此跟踪消息的大小可能很大,因此可能会导致问题。考虑“system.out.println”样式记录的替代方法很有用:

关于Counters和MultipleOutputs的最好的事情 - 您可以以可编程方式访问它们,如果是MultipleOutputs,您甚至可以运行map / reduce任务从日志中提取一些统计信息。

调试生产环境的另一种方法是单元测试,MiniMRCluster将帮助您在单元测试期间测试map-reduce作业。

答案 3 :(得分:0)

我使用maven在Eclipse中开发我的map / reduce代码来构建运行时jar并管理依赖项。一旦我在我的机器上安装并运行hadoop以支持HDFS,我就可以在Eclipse中运行和调试我的代码。这意味着在Eclipse调试透视图中使用断点和其他所有内容。