MapReduce简介

        随着大数据时代的到来,数据分析、挖掘为各大商业集团关注的焦点。MapReduce不失为分析大数据(Tb, Pb级别)的有效工具。

        MapReduce的工作过程分为两个阶段:map阶段和reduce阶段。

        Map阶段:map阶段输入的是原始的待处理的大量数据。在编程中,map数据对应了一个map函数。这个函数共有4个输入,分别是输入数据的一个键值对(K1, V1),一个输出(类型为OutputCollector<K2, V2>,存放了map输出键值对),以及一个记录器(Reporter)。

        Reduce阶段:reduce阶段对应的是reduce函数。在实际应用中,reduce函数接着处理map函数输出的数据。reduce函数也有4个输入。前两个输入为map数据的输出,也就是(K2, V2)。第三个参数为OutputCollector<K3, V3>,(K3, V3)为输出的键值对。第四个参数也是一个记录器(Reporter),记录了一些运行时的日志。

        下面以一个文本文件做为输入为例。该文本每一行记录了一些数据(行号、日期、营业额),比如一个公司一年的的营业额。现在我们需要计算这一年中哪一天的营业额最高。那么我们可以将这个过程分为两个部分,分别对应于map阶段和reduce阶段。事实上,这些数据中对我们有用的只是日期和每天的营业额。因此,在map阶段,我们首先对每一行数据进行处理,提取出该行的日期和营业额,然后将其存入OutputCollector中。紧接着reduce阶段接收map函数产生的OutputCollector,对每天的营业额进行排序,将营业额最高的一天的日期和营业额作为输出。

        下面是一个具体处理的例子。

        1    07/11/2014    3012万元

        2    07/12/2014    3654万元

        3    07/13/2014    4512万元

                       ...

那么map函数的前两个变量(输入键值对)可以分别为文本文件的行号和每一行对应的文本。

        K1 = 1

        V1 = "1    07/11/2014    3012万元"

Map函数的输出时是由程序员自己定义的。在这个例子中即为两个向量

        K2                   V2

07/11/2014     3012万元

07/12/2014     3654万元

07/13/2014     4512万元

                     ...

map阶段将此时的输出存到内存中。在reduce阶段,reduce函数读取map的输出作为自己的输入(map输出的类型不能发生变化)。接着,reduce函数对每对键值按照营业额大小进行排序,并将营业额最大的一天的日期与营业额作为输出。假设在07/13/2014这天的营业额最高,那么输出即为

       K3                   V3

07/11/2014     4512万元

 

 

以上是对MapReduce工作过程的简要介绍。

    

        那么为什么要将该机制分为map阶段和reduce阶段呢。换句话说,为什么我们要采用MapReduce机制来处理海量数据?有的人可能说如果在数据库中配上大量的磁盘空间中分析数据不是更方便?

        对于这个问题,首先所谓的海量数据主要是Tb级别乃至Pb级别,即使是一个小型机乃至大型机也不可能有如此大的磁盘空间。

        其次,磁盘驱动器寻址时间的提高速度要远远慢于不同计算机之间网络传输速率的提高速度。至于什么是寻址时间,我想度娘很清楚。

        再次,一台IBM大型机需要的money可能上千万。而有了几千万的人民币可以买多少台个人计算机,这可是一个相当大的集群。如果这么多台计算机并行处理,是不是速度会很快?如果几百台个人计算机组成的集群的计算能力和速度可以赶上一个大型机,那么买大型机的意义何在?

       

 

        事实上,MapReduce是Google提出的一种处理海量数据的方法。要想运行在多台计算机的集群中,一个特殊的文件系统也是必须的。Apache对此将MapReduce与几种分布式系统结合在一起(这些分布式系统中最常用的还是HDFS),也就是现在的Hadoop。MapReduce的工作机制也远非像上述阐述的那么简单。这里只是一个比较形象的概念。具体的工作机制将会在日后为大家奉献。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值