调试 MapReduce¶
MapReduce 在 Hadoop 上运行时可能会报错,但报错信息并不会告诉我们哪里出错了。我们可以在本地调试 Map 或 Reduce 的 Python 文件,帮助找到报错的原因。

问题描述¶
本项目的目录层级结构:

在运行run.sh时,可能会运行失败。

可以看到,才刚开始map,就出现了错误。这说明mapper.py文件可能有 bug。
调试mapper.py¶
但是 Hadoop 端并没有告诉我们 bug 在哪里。我们可以在本地通过管道命令对mapper.py进行调试。

|是 Linux 命令的管道,|左边的东西会作为右边的输入。在这个例子中,我们将A.txt和B.txt作为mapper.py的输入,并在屏幕打印mapper.py的输出结果。
可以看到,第 7 行的代码中field没有被定义。
再检查mapper.py,发现确实是少写了一个字母,导致变量名出错。

修改变量名后,再次调试,可以发现运行正常:

调试reducer.py¶
在调试完mapper.py后,可以继续将mapper.py的输出作为reducer.py的输入,对reducer.py进行调试。

可以发现运行结果符合预期,说明reducer.py应该也是正确的。