大数据学习对MapReduce的理解浅析

MapReduce的理解浅析

概述:

       首先了解MapReduce,是一种编程模型,用于大规模的数据的并行运算,从数据传输的角度来看,可将它分为输出端Map(映射)和接收端Reduce(归纳)。Map是要处理数据的一部分映射,hadoop集群的文件传输的方式都是以块为单位进行运算的,这里的Map看为磁盘中的数据在内存中的映射,而传输数据就是对映射在内存中的数据,进行分类、处理、加工使方便传输。然后,通过IO接口进行数据传输。最终由不同的Reduce接收不同的Map读取到内存,并将数据持久化,保存到磁盘上。

MapReduce的特点

1、 易于编程
2、有良好的扩展性
3、高容错性
4、适合 PB 级以上海量数据的离线处理

MapReduce的缺点

   1、实时计算。MapReduce 无法像 Mysql 一样,在毫秒或者秒级内返回结果。

    2、流式计算。流式计算的输入数据时动态的,而 MapReduce 的输入数据集是静态的,不能动态变化。这是因为 MapReduce 自身的设计特点决定了数据源必须是静态的。

> 3、DAG(有向图)计算。多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce
> 并不是不能做,而是使用后,每个MapReduce 作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

下面是一幅来自官网的解析图:

      这里有四个Map映射数据源和三个Reduce数据归纳。Map的数量由传输端的数量而定,Reduce由数据的类型而定。

数据要进行分类重组再存储的原因:

1、大数据的数据量很大经过处理器分类解析能够排除到一些脏数据,减少对传输的压力。
2、**在整个数据传输过程中,数据传输的过程是最消耗时间的,也是最影响整个性能的因素。**通过将数据进行分类分块的传输由不同的Ruduce并行接收能够提到传输效率,多个Map进程同时进行能够,提高传输数据的性能。
在这里插入图片描述

map task (映射任务)

  • input split(输入分割):大数据的传输方式将数据以块为单位进行传输,将磁盘上的大量待传输数据进行切块映射到内存Map中。

shuffle write(改组写入) :coty phase(复制阶段)

  • buffer in memory(超高速缓冲存储器):将不同的块缓冲到多个核内,并行处理。这里缓冲区只能用到70%,留30%的缓冲区。
  • partition sort and spill to disk (排序并溢出到磁盘):在处理器内将各个块内的数据进行分类分区(partitions),并按照类型进行排序。可过滤掉一小部分无用的数据。
  • merge on disk(合并到内存上):这一步骤将,处理器进行分类的数据按照数据的不同类型整合在一起,例如:数据的重要程度为A、B、C类,这个过程就是将不同核处理的不同的块中的A类数据放到一起、B类数据放到一起、C类数据放到一起。
  • fetch(取得数据):经过merge on disk(合并到内存上)分类处理的数据,获得了这几个块的A、B、C类型的数据,然后通过IO接口传输。

shuffle read (改组读取) : sort phase (排序阶段)

  • merge (合并数据) :将获取到的fetch通过IO接口传输过来的数据进行并行合并,多个处理器核同时多个进程进行运算处理进行数据的合并。然后将合并的数据块继续merge(合并)最终得到同类型的数据。这个过程是mixture of in-memory and on-disk data(将内存中的数据混合)。

reduce task (归纳 任务)

  • Reduce(归纳):一种类型的Reduce会接收并合并该类型的数据,接收端将数据整合成一个整体的数据。

  • output (数据输出):将内存中读到的数据持久化到磁盘存储。

一个split约等于一个block,可以一个split由两个Map来处理

猜你喜欢

转载自blog.csdn.net/gzzBlogs/article/details/91977018