我该如何调试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调试透视图中使用断点和其他所有内容。