Skip to content

Latest commit

 

History

History
58 lines (31 loc) · 3.58 KB

14、MapReduce的概述及核心编程思想.md

File metadata and controls

58 lines (31 loc) · 3.58 KB

一、MapReduce学习思维导图

在这里插入图片描述

二、MapReduce定义

MapReduceHadoop的一个分布式(多台机器)运算程序的编程框架,也是Hadoop的核心框架

如果让我们用程序实现一个多台机器并发计算的程序,我们可能需要关心到数据传输、如何并发等很多底层的问题,MapReduce为我们提供了一系列的框架,我们可以直接调用

MapReduce核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上

综上所述:==MapReduce = 自己写的业务逻辑代码 + 它自身默认的底层代码==

三、MapReduce的优缺点

1、优点

  • 易于编程:因为MapReduce已经封装好了底层代码,我们只需要关心业务逻辑代码,实现框架的接口就好了
  • 有良好的扩展性:如果服务器资源枯竭,可以动态增加服务器,解决计算资源不够的问题
  • 高容错性:任何一台机器挂掉,都可以将任务转移到其他节点
  • 适合海量数据计算:TB/PB级别,几千台服务器共同计算

2、缺点

当然因为MapReduce把中间结果存放在了硬盘,所以它不适合用于:

  • 不适用于实时计算
  • 不擅长流式计算(Spark Streaming、Flink适合)
  • 不擅长DAG有向无环图计算

四、MapReduce核心编程思想

拿一个需求来举例说明MapReduce的思想:有个300M的文件,统计每一个单词出现的总次数,要求查询结果a-p的为一个文件,q-z的为一个文件

如果拿到现实中,要统计这么多单词并且按照a-p,p-z分区,会拿出两张纸,一张纸记录a-p的、另一张纸记录p-z的,但是300M的文件太大了,自己一个人肯定完不成,所以找来两个人来帮忙,他们都拿出两张纸按照同样的方法进行统计,到最后他们各自会拿出满满的两页纸,上面记录着各个单词,每个单词出现一次就记录为(hadoop->1)这样的键值对。这个就是Map阶段,他们三个人每个人做的都是MapTask任务。

上面的任务做完了,就需要专门派两个人来统计a-pp-z开头的单词,把相同的单词后面数字相加,这样就得到了最后的结果。这个阶段是Reduce聚合阶段,这两个人做的是ReduceTask任务。

如下图所示,就是上述的过程:

在这里插入图片描述

换成专业的说法,看下图:

在这里插入图片描述

综上所述:

  • 分布式的运算程序王王需要分成至少两个阶段
  • 第一个阶段的MapTask并发实例,完全并行运行,互不相干
  • 第二个阶段的ReduceTask并发实例互不相干,但是他们依赖于MapTask的结果
  • MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那么只好编写多个MapReduce程序,但是这些都是串行执行的