MapReduce简介

 1.MapReduce框架简介

        要设计倒排索引这个算法,那么我们首先得知道MapReduce框架中的InputFormat类,Mapper类,Partition过程,sort过程,Combine类,Reduce类的设计原理。

1.1InputFormat类

        InputFormat类的作用是什么呢?其实就是把输入的数据(就是你上传到hdfs的文件)切分成一个个的split,然后将split分拆成<key,value>对做为map函数的输入。hadoop里默认使用TextInputFormat类处理输入(这个类只处理文本文件)。TextInputFormat类将文本文件的多行分割成多个split,并通过LineRecorderReader将其中的每一行解析成<key,value>对,key为该行在文本中的偏移量,value值为这一行的内容。例如下面一个text.txt文本,经过InputFormat类处理之后

 

  如上图text1.txt文档,经过InputFormat处理之后,形成了3个<key,value>对,这3对之中,第一对中key=0,是因为hello单词位于文本头。第二对中key=31,是因为下一行的首单词if相对整个文本,它位于31的位置。类似第三对也如此。您可以自己数下并知道。

        这3个<key,value>对做为map函数的输入,然后你可以根据需要在对输入的<key,value>对进行处理。

1.2Mapper类

       实现map函数,根据输入的<key,value>对生成中间结果。这里以wordcount例子来说,对于上面的text.txt文档经过InputFormat处理之后,上面3对<key,value>对输入map之后,输出过程如下:

                                   图2 map处理过程

1.3Partition过程

       Partition就是分区。为什么要分区呢?因为大多时候有多个Reducer,分区的作用就是对map的输出,redcue的输入进行预处理。最重要的就是处理到在输入reduce的数据,保证同一个key值被分到同一个reduce。MapReduce程序中,Partition决定Map节点的输出将分区到那个Reduce节点上。默认是使用HashPartition,根据key值进行Hash操作。

 

                                           

                                   图3 Partition分区过程

仔细观察Partition分区过程,text1.txt和text2.txt的partition1分区中有相同的key。这就是分区的效果,把相同的key放在同一个分区里。

1.4 sort过程

      sort过程就是把键值对按照key值的首字母进行排序。

 

1.5 Combin类

       Combine过程是Mapper的一部分,在map函数之后执行。实现combine函数,合并中间结果具有相同key值的键值对。

 

1.6 Reduce类

       reduce过程是整合的过程,当然像wordcount的例子,我们只需要统计单词个数而已,只需一个简单的统计循环。

 

原文地址:https://www.cnblogs.com/aijianiula/p/3976562.html