MapReduce的计算模型介绍

目录

一、MapReduce核⼼思想

二、MapReduce的阶段分类


一、MapReduce核⼼思想

        MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。

阅读资料
        Hadoop的 MapReduce 核⼼技术起源于⾕歌在 2004 年发表的关于 MapReduce系统的论⽂介绍。论⽂中有这么⼀句话:Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages。这句话提到了 MapReduce 思想来源,⼤致意思是, MapReduce 的灵感来源于函数式语⾔(⽐如Lisp )中的内置函数 map (映射)和 reduce (规约)。
        简单来说,在函数式语⾔⾥,map 表示对⼀个列表( List )中的每个元素做计算reduce 表示对⼀个列表中的每个元素做迭代计算。它们具体的计算是通过传⼊的函数来实现的,map reduce 提供的是计算的框架。我们想⼀下,reduce既然能做迭代计算,那就表示列表中的元素是相关的(⽐如我想对列表中的所有元素做相加求和,那么列表中⾄少都应该是数值吧)。⽽map 是对列表中每个元素做单独处理的,这表示列表中可以是杂乱⽆章的数据。这样看来,就有点联系了。在MapReduce ⾥, Map 处理的是原始数据,⾃然是杂乱⽆章的,每条数据之间互相没有关系;到了Reduce 阶段,数据是以 key 后⾯跟着若⼲个value 来组织的,这些 value 有相关性,⾄少它们都在⼀个 key 下⾯,于是就符合函数式语⾔⾥map reduce 的基本思想了。

MapReduce⼀个完整的运算分为MapReduce两个部分

Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。

Reduce负责“合”,即对map阶段的结果进行全局汇总

二、MapReduce的阶段分类

 第⼀阶段

        第⼀阶段,也称之为Map 阶段。这个阶段会有若⼲个 MapTask 实例,完全并⾏运⾏,互不相⼲。每个MapTask 会读取分析⼀个 InputSplit( 输⼊分⽚,简称分⽚ ) 对应的原始数据。计算的结果数据会临时保存到所在节点的本地磁盘⾥。
         数据扭转
        该阶段的编程模型中会有⼀个map 函数需要开发⼈员重写, map 函数的输⼊是⼀个<key,value>对 ,map 函数的输出也是⼀个 <key,value> ,key value 的类型需要开发 ⼈员指定。参考下图:

 第⼆阶段

        第⼆阶段,也称为Reduce 阶段。这个阶段会有若⼲个 ReduceTask 实例并发运⾏,互不相⼲。但是他们的数据依赖于上⼀个阶段的所有maptask 并发实例的输出。⼀个ReudceTask会从多个 MapTask 运⾏节点上 fetch ⾃⼰要处理的分区数据。经过处理后,输出到HDFS上。
         数据扭转
        该阶段的编程模型中有⼀个reduce 函数需要开发⼈员重写, reduce 函数的输⼊也是⼀个<key value> 对, reduce 函数的输出也是⼀个 <key value> 对。这⾥要强调的是,reduce 的输⼊其实就是 map 的输出,只不过 map 的输出经过 shuffle 技术后变成了<key,List> ⽽已。参考下图:
注意 : MapReduce 编程模型只能包含⼀个 map 阶段和⼀个 reduce 阶段,如果⽤户的业务逻辑⾮常复杂,那就只能多个MapReduce 程序,串⾏运⾏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值