调试 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
应该也是正确的。