Chinaunix首页 | 论坛 | 博客
  • 博客访问: 611623
  • 博文数量: 69
  • 博客积分: 1891
  • 博客等级: 上尉
  • 技术积分: 1359
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-20 23:38
文章分类

全部博文(69)

文章存档

2012年(46)

2011年(23)

分类: 云计算

2012-05-23 21:00:17

   正如书中所说,MapReduce是一种用于数据处理的编程模型,通俗的说,它是用于大树据处理的程序框架。在MapReduce框架下,开发者可以用自己熟悉的开发语言Java,C++,甚至是Unix命令行来进行数据处理。   

   那么,为什么要使用MapReduce框架呢?为什么不用多线程来处理呢?作者举了一个很好的例子来说明这个问题,从NCDC气象记录中找出每年最高气温。这个问题通过多线程来,完全可以处理,但是相对于用MapReduce来处理而言,开发者需要自己处理3个棘手的问题:一是任务的划分,因为不同年份的数据数据文件大小差别很大,不能根据文件数目来划分任务,因为这样会导致任务划分不均;二是对于每个独立进程的结果,我们需要进行合并,如果将文件按照块大小来划分的话,那么合并结果又需要特别的方法了,因为同一个年份的数据可能分布在不同的块中;三是如果用多线程来处理的话,我们的资源就只限于一台机器了,如果要放到多台机器上去处理,那么多机环境的协调性和可靠性又会带来很大的影响。但是如果使用MapReduce框架的话,开发者就只用关注数据处理的细节,不必关注任务的划分,结果的合并,处理器资源的协调等因素的影响。

   那么,MapReduce是怎样的一个框架呢?MapReduce将数据的处理分为两个阶段:map阶段和reduce阶段。map阶段的输入是原始数据,这个阶段是在原始数据上提取出我们需要的数据,同时在这里也可以剔除缺失的或者错误的数据,然后将符合条件的数据,以MapReduce的格式交给reduce处理。在交给reduce处理的过程中,数据会进行排序和分组。最后交由reduce处理,得出最终的结果。这便是MapReduce框架处理数据的过程,map抽取数据,排序合并,reduce进行处理产生最终结果。知道原理了,那么具体的实现就很简单了。开发者只用关注数据提取,以及数据提取的细节,而对于数据合并,存储,任务分配,集群扩展等问题都交由MapReduce框架来处理,这样大大提高了开发效率,是用传统多线程处理所无法可比的。
阅读(1707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~