跳转至

调试 MapReduce

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

image-20220917111605682

问题描述

本项目的目录层级结构:

image-20220917120453740

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

image-20220917111403946

可以看到,才刚开始map,就出现了错误。这说明mapper.py文件可能有 bug。

调试mapper.py

但是 Hadoop 端并没有告诉我们 bug 在哪里。我们可以在本地通过管道命令mapper.py进行调试。

Bash
cat ./*.txt | python ./mapper.py

image-20220917111605682

|是 Linux 命令的管道,|左边的东西会作为右边的输入。在这个例子中,我们将A.txtB.txt作为mapper.py的输入,并在屏幕打印mapper.py的输出结果。

可以看到,第 7 行的代码中field没有被定义。

再检查mapper.py,发现确实是少写了一个字母,导致变量名出错。

image-20220917111915930

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

image-20220917112818103

调试reducer.py

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

Bash
cat ./*.txt | python ./mapper.py | python ./reducer.py

image-20220917113002445

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

评论