3

我正在尝试在 Ubuntu 下使用 eclipse 调试在 python 的 mrjob 库中编写的 mapreduce 作业。有谁知道如何做到这一点?

4

2 回答 2

4

调试 MrJobs 有时可能是一个相当大的挑战。我的学习曲线是从使用 try... except 子句开始的,映射器和化简器将产生的异常(使用 traceback 模块)生成到结果中,而不是破坏工作流程。但是第一种方法很耗时,因为您必须等待几分钟才能完成工作,最后,大多数错误最终都会导致未定义的变量或语法错误。因此,我尝试使用小型测试日志来提供作业,这大大减少了运行作业以查看问题所在的时间。另一种方法是在 hadoop 之外测试映射器和缩减器,这非常方便,因为您可以为此目的使用 pdb,并快速找出问题。

最后,您还可以尝试使用 MrJob 文档的建议,然后您会发现如何在本地运行作业非常方便: http ://packages.python.org/mrjob/runners-inline.html

于 2013-01-03T03:42:59.283 回答
2

关键是要有尽可能多的测试覆盖率。即使您在本地运行作业,重复地重新运行作业也会很快耗尽您的一天。对我来说,解决方法是将 map 和 reduce 步骤分解为一系列较小的函数,并为每个小步骤编写单元测试。

此外,请注意本地 Python 版本与安装在 Hadoop 实例上的版本之间的差异(最新的 EMR 实例使用 Python 2.6)。我在这里列出了一些调试技巧。

于 2013-02-01T04:22:26.097 回答