书上是拿这道题来当MapReduce程序的第一个例题,很有代表性,所以我拿这道题来解释一下MapReduce程序运行的流程吧。
先来看看代码的最上面的部分,都是一些import的引用类,如下图所示
这些import都不用手敲,都不用手敲,都不用手敲。先写好下面的Map、Reduce类和main()方法的代码之后按下Ctrl+Shift+O就会自动导入如果有很多选项,就会弹出提示框让你选择,根据上图可以看到选择导入的基本上都是org.apache.hadoop开头的,选中之后按回车,或者单击鼠标左键。import完之后那些红线就基本上没有了,如果还有红线只能说明两件事:一、import的不对;二、源程序有问题。如果import的不对,那么删除这个import再重新import别的试试,如果源程序有问题,那就需要具体问题具体分析了。下面我来演示一下如何使用Ctrl+Shift+O快捷键。
再来看一下Map和Reduce类
因为我们写的Map和Reduce类需要在main()方法中调用,而main()方法是static的,所以我们写的Map和Reduce也必须是static的,这涉及到了Java内存那方面的知识,具体细节我会另写一篇文章介绍,现在先记住,static的方法只能调用static的类或常量或方法。
我们写Map类,总不能想到啥写啥吧,必须有个规范,好在前人已经给我们制定好了规范,就是Mapper类,我们可以用按住Ctrl+鼠标左键单击Mapper,进入源码看一眼。
具体细节我就不说了,就说下面这一句代码
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
这句代码告诉我们Mapper类的四个泛型的意义:输入键值对和输出键值对,回来看一下我们写的Map类,继承了Mapper