事实上MapReduce应该是分开来读的Map/Reduce,网上也有一些关于MapReduce的文章,不过讲的都不是很明晰透彻,所以才有了本文,本文是云框架Hadoop系列又一力作,后续还有关于云框架Hadoop的数据库讲解,好了切入正文:
      MapReduce中文解释是“映射/规约”的意思,但是从英文角度去看,map有地图的意思,而reduce的意思是迫使,归纳;
      映射的话,我自己的理解就是k/v(key/value),即键对值.这个懂点程序的人来讲,都不难理解啦,不过这里的键值操作和以往的程序不同,这个键值可以是对应一个函数来讲,虽然有些抽象,但是仔细想想不难理解;剩下的就是规约,规约有规范整理的意思,所以我的理解是,规约即“键值操作”,用户先在Master端输入信息,存入系统之后,jobtacker将数据传递同步给tasktracker服务器群,然后由这些slave服务器转换成为k/v哈希数据表。
最后由规约程序处理这些数据,最后返回给用户端。这样下来,整个mapreduce任务就完成了,当然其中还有很多数据处理的细节没有讲到,因为这个需要实例去讲解。
具体Hadoop实现机制,以下是一位朋友的解释:
Hadoop映射/归约的架构:
  Hadoop映射/归约框架是一个主/从(master/slave)架构.它由一个主服务器(Jobtracker)和若干从服务器(tasktracker)组成。主服务器是用户与系统打交道的关键。用户将自定义的
  映射/归约操作提交给主服务器。主服务器将操作放入作业队列中并按照先到先服务的原则对队列中的任务进行处理。主服务器用来将映射或者归约操作分配给不同的从服务器。从服务器在主服务器的控制下执行操作,同时,不同的从服务器间在映射和归约阶段也进行着数据传输
 
也是一样,没有提及到具体的实现方法。
好了,空口无凭,下面我就用实例说明一切:
以下是GOOGLE云计算mapreduce 论文上的一个简单的例子吧,在TB数量级的文档集合中统计每一个单词出现的次数。有如下的伪代码,其中map函数检查每一个单词,并且对每一个单词增加1到其对应的计数器。reduce函数把特定单词的所有出现的次数进行合并。
map(String key, String value):

             // key: document name

             // value: document contents

             for each word w in value:

                            EmitIntermediate(w, "1");

    

reduce(String key, Iterator values):

             // key: a word

             // values: a list of counts

             int result = 0;

             for each v in values:

                            result += ParseInt(v);

             Emit(AsString(result));
 
 
虽然代码很简短,但是功能上已经实现我们所需要的了,根据这个可以举一反三,谢谢大家阅读本文。
解占辉 [email protected]