2012-10-02 117 views
5

即时尝试构建地图缩减作业。我如何调试Hadoop地图减少

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

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

使用Java API,以产生一个外部的日志文件,尝试使用log.severe打印至屏幕(“日志数据”)或使用log4j的记录器方法log.info(日志数据)将不会工作,要么/

我看到我的调试消息的唯一时间是在映射缩减作业中出现异常时没有任何作用。

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

+2

使用println不调试。这是追踪。 – maba

+1

也许你没有足够的日志记录(http://stackoverflow.com/questions/4821134/hadoop-enable-logging)?即使System.out.println()可以重定向 –

回答

3

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

+0

thx似乎是足够的希望现在生病了设法解决问题 –

0

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

1

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

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

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

3

你可以尝试Jumbune

从他们的指导:

调试器提供的MapReduce作业执行的代码的控制流程的统计数据。用户可以应用正则表达式验证或用户定义的验证类。根据应用的验证,Flow Debugger会检查输入数据元组的流量 ,实际上会为提交的作业中的每个映射器和缩减器配对数据。

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