我该如何调试Hadoop map reduce

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

它运行完成但最后会出现奇怪的数据。

当我尝试使用system.out.println(“调试数据”)进行调试时,它不会显示在屏幕上。

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

在地图缩减作业中出现exception时,我看到调试消息的唯一时间是无效的。

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

这个答案可能有帮助。 Hadoop为其自己的作业跟踪日志记录系统捕获System.out。

你可以试试Jumbune

从他们的指南:

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

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

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

  • 使用计数器( 这是一个简单的例子)
  • 使用MultipleOutputs将日志写入HDFS

关于Counters和MultipleOutputs的最好的事情 – 你可以编程访问它们,在MultipleOutputs的情况下你甚至可以运行map / reduce任务从日志中提取一些统计数据。

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

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