码迷,mamicode.com
首页 > 其他好文 > 详细

倒排索引和MapReduce简介(未完待续)

时间:2014-09-17 11:41:02      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   使用   ar   strong   for   文件   

1.前言

        学习hadoop的童鞋,倒排索引这个算法还是挺重要的。这是以后展开工作的基础。首先,我们来认识下什么是倒排索引:

        倒排索引简单地就是:根据单词,返回它在哪个文件中出现过,而且频率是多少的结果。这就像百度里的搜索,你输入一个关键字,那么百度引擎就迅速的在它的服务器里找到有该关键字的文件,并根据频率和其他一些策略(如页面点击投票率)等来给你返回结果。这个过程中,倒排索引就起到很关键的作用。

2.MapReduce框架简介

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

2.1InputFormat类

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

 bubuko.com,布布扣

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

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

 

 

2.2Mapper类

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

 

bubuko.com,布布扣

                                   图2 map处理过程

2.3Partition过程

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

 bubuko.com,布布扣

                                           

                                   图3 Partition分区过程

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

2.4 sort过程

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

 bubuko.com,布布扣

 

2.5 Combin类

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

 bubuko.com,布布扣

2.6 Reduce类

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

 bubuko.com,布布扣

 

倒排索引和MapReduce简介(未完待续)

标签:style   blog   http   io   使用   ar   strong   for   文件   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!