`
yunsamzhang
  • 浏览: 70063 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

什么是MapReduce?

阅读更多
1、MapReduce来龙去脉

MapReduce是一个说难懂也难懂、说好懂也好懂的概念。
说它难懂,是因为,如果你只理论上的去学习、去理解,确实很难懂。
说它好懂,是因为,如果你亲手在hadoop运行过几个MapReduce的job,并稍微学点hadoop的工作原理,基本上也就理解MapReduce的概念了。

所以,有句话说的特别好:“如果将编程比作运动的话,那么它绝对不是表演项目,而是竞技项目。”(摘自《Erlang程序设计》第10页)

但是,在这里,我还是想向不了解MapReduce的同学们介绍一下MapReduce。
MapReduce借用了函数式编程的概念,是google发明的一种数据处理模型。因为google几乎爬了互联网上的所有网页,要为处理这些网页并为搜索引擎建立索引是一项非常艰巨的任务,必须借助成千上万台机器同时工作(也就是分布式并行处理),才有可能完成建立索引的任务。

所以,google发明了MapReduce数据处理模型,而且他们还就此发表了相关论文


后来,Doug Cutting老大就根据这篇论文硬生生的复制了一个MapReduce出来,也就是今天的Hadoop。如果没听说过hadoop,请参考《hadoop扫盲篇》


2、MapReduce工作过程

知道了MapReduce是分布式数据处理编程模型后,下面我们看看它是怎么工作的。

MapReduce处理数据过程主要分成2个阶段:map阶段和reduce阶段。先执行map阶段,再执行reduce阶段。

1) 在正式执行map函数前,需要对输入进行“分片”(就是将海量数据分成大概相等的“块”,hadoop的一个分片默认是64M),以便于多个map同时工作,每一个map任务处理一个“分片”。
2) 分片完毕后,多台机器就可以同时进行map工作了。
   map函数要做的事情,相当于对数据进行“预处理”,输出所要的“关切”。
   map对每条记录的输出以<key,value> pair的形式输出。
3) 在进入reduce阶段之前,还要将各个map中相关的数据(key相同的数据)归结到一起,发往一个reducer。这里面就涉及到多个map的输出“混合地”对应多个reducer的情况,这个过程叫做“洗牌”。
4) 接下来进入reduce阶段。相同的key的map输出会到达同一个reducer。
   reducer对key相同的多个value进行“reduce操作”,最后一个key的一串value经过reduce函数的作用后,变成了一个value。


上面粗略的介绍了MapRedcue。来发张图,更有利于理解:

上图来自《Hadoop The Definitive Guide》


*** THE END ***

  • 大小: 44.1 KB
分享到:
评论
8 楼 forchenyun 2010-07-13  
lz有没有mapreduce做分布式索引的相关经验?
7 楼 yunsamzhang 2010-07-13  
superwind 写道
hadoop的一个分片默认是64M,那么对于一个记录行形式的文本,64M大小的切分会不会将一个记录给破坏掉?hadoop是怎么进行文本大文件的切分,是按行读取,然后然后尽可能的接近64M吗?楼主能否解惑下,感谢!


如果,记录行非常长的话,那么在HDFS上,就有可能一个数据行被分割成2个block存储。

但是map的输入分片则不会将一行记录打断。

综合上面两句话,结论是:遇到这种情况,那么map的task,有可能会从其他的datanode上读取那“半行”数据。

《Hadoop.The.Definitive.Guide》上面有个图,很好的说明了这一点:



另外,输入分片时,不是按行号分的,而是按照字符的偏移量。
6 楼 superwind 2010-07-13  
hadoop的一个分片默认是64M,那么对于一个记录行形式的文本,64M大小的切分会不会将一个记录给破坏掉?hadoop是怎么进行文本大文件的切分,是按行读取,然后然后尽可能的接近64M吗?楼主能否解惑下,感谢!
5 楼 yunsamzhang 2010-07-13  
dilantaya 写道
MapReduce 应用场景 除啦搜索外还有哪些


推荐一个PPT,里面列了几个实例。

另外,可以参考:Who Uses Hadoop?
4 楼 wlwolf 2010-07-13  
最近发现大家对Hadoop比较热衷啊
3 楼 dilantaya 2010-07-13  
MapReduce 应用场景 除啦搜索外还有哪些
2 楼 yunsamzhang 2010-07-13  
huochai2009 写道
希望多多介绍下Hadoop的应用及原理呀


感谢关注,我会努力的
1 楼 huochai2009 2010-07-13  
希望多多介绍下Hadoop的应用及原理呀

相关推荐

    MapReduce and HDFS

    #### 什么是MapReduce? MapReduce是一种编程模型,用于处理和生成大型数据集,其设计目标是简化大型集群上的分布式编程。该模型包含两个主要阶段:Map(映射)和Reduce(归约)。 - **Map阶段**:在这个阶段,...

    07丨为什么说MapReduce既是编程模型又是计算框架?.html

    07丨为什么说MapReduce既是编程模型又是计算框架?.html

    hadoop aster

    **什么是MapReduce?** MapReduce是一种分布式计算模型,由Google提出,用于处理和生成大规模数据集。它将大型任务拆分为小块,分配到多台服务器上并行处理,然后汇总结果。这种模型特别适合于数据密集型的批处理...

    实验项目 MapReduce 编程

    实验项目“MapReduce 编程”旨在让学生深入理解并熟练运用MapReduce编程模型,这是大数据处理领域中的核心技术之一。实验内容涵盖了从启动全分布模式的Hadoop集群到编写、运行和分析MapReduce应用程序的全过程。 ...

    mapreduce mapreduce mapreduce

    MapReduce是一种分布式计算模型,由Google开发,用于处理和生成大量数据。这个模型主要由两个主要阶段组成:Map(映射)和Reduce(规约)。MapReduce的核心思想是将复杂的大规模数据处理任务分解成一系列可并行执行...

    基于MapReduce实现决策树算法

    基于MapReduce实现决策树算法的知识点 基于MapReduce实现决策树算法是一种使用MapReduce框架来实现决策树算法的方法。在这个方法中,主要使用Mapper和Reducer来实现决策树算法的计算。下面是基于MapReduce实现决策...

    Hadoop mapreduce实现wordcount

    【标题】Hadoop MapReduce 实现 WordCount MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的...

    MapReduce 设计模式

    MapReduce是一种编程模型,用于大规模数据集的并行运算。它最初由Google提出,其后发展为Apache Hadoop项目中的一个核心组件。在这一框架下,开发者可以创建Map函数和Reduce函数来处理数据。MapReduce设计模式是对...

    hadoop mapreduce编程实战

    Hadoop MapReduce 编程实战 Hadoop MapReduce 是大数据处理的核心组件之一,它提供了一个编程模型和软件框架,用于大规模数据处理。下面是 Hadoop MapReduce 编程实战的知识点总结: MapReduce 编程基础 ...

    MapReduce基础.pdf

    ### MapReduce基础知识详解 #### 一、MapReduce概述 **MapReduce** 是一种编程模型,最初由Google提出并在Hadoop中实现,用于处理大规模数据集的分布式计算问题。该模型的核心思想是将复杂的大型计算任务分解成较...

    基于MapReduce的Apriori算法代码

    基于MapReduce的Apriori算法代码 基于MapReduce的Apriori算法代码是一个使用Hadoop MapReduce框架实现的关联规则挖掘算法,称为Apriori算法。Apriori算法是一种经典的关联规则挖掘算法,用于发现事务数据库中频繁...

    mapreduce项目 数据清洗

    MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解成两个主要阶段:Map(映射)和Reduce(化简)。在这个"MapReduce项目 数据清洗"中,我们将探讨...

    Hadoop介绍,HDFS和MapReduce工作原理

    Hadoop介绍,HDFS和MapReduce工作原理

    学生mapreduce成绩分析

    MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。这个模型将复杂的计算任务分解成两个主要阶段:Map(映射)和Reduce(化简),使得在大规模分布式环境下处理大数据变得可能...

    MapReduce 谷歌实验室论文

    MapReduce是一种由谷歌实验室提出的大规模数据处理模型及其相关实现方案。这篇论文详细介绍了MapReduce的概念、工作机制以及在实际中的应用。MapReduce模型通过两个主要函数——Map函数和Reduce函数来处理数据,使得...

    Linux运维-运维课程MP4频-06-大数据之Hadoop部署-13mapreduce是什么?.mp4

    Linux运维-运维课程MP4频-06-大数据之Hadoop部署-13mapreduce是什么?.mp4

    大数据 hadoop mapreduce 词频统计

    【大数据Hadoop MapReduce词频统计】 大数据处理是现代信息技术领域的一个重要概念,它涉及到海量数据的存储、管理和分析。Hadoop是Apache软件基金会开发的一个开源框架,专门用于处理和存储大规模数据集。Hadoop的...

    MapReduce发明人关于MapReduce的介绍

    ### MapReduce:大规模数据处理的简化利器 #### 引言:MapReduce的诞生与使命 在MapReduce问世之前,Google的工程师们,包括其发明者Jeffrey Dean和Sanjay Ghemawat,面临着一个共同的挑战:如何高效地处理海量...

    【MapReduce篇07】MapReduce之数据清洗ETL1

    MapReduce之数据清洗ETL详解 MapReduce是一种基于Hadoop的分布式计算框架,广泛应用于大数据处理领域。数据清洗(Data Cleaning)是数据处理过程中非常重要的一步,旨在清洁和转换原始数据,使其更加可靠和有用。...

    MapReduce实例分析:单词计数

    单词计数是最简单也是最能体现 MapReduce 思想的程序之一,可以称为 MapReduce 版“Hello World”。单词计数的主要功能是统计一系列文本文件中每个单词出现的次数。本节通过单词计数实例来阐述采用 MapReduce 解决...

Global site tag (gtag.js) - Google Analytics