MapReduce原理

MapReduce原理总结

1.MapReduce的基本概念
        MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
       1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
       2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
       3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理
        MapReduce的主要思想: 分久必合
        MapReduce的核心思想: “相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算。
2.MapRduce分布式计算原理
  MapTask的流程:
      1)MapReduce在计算之前会将HDFS上的文件划分为切片split,split默认大小约等于block块的大小;若想要map端并行性度越高,就要将切片设置的越小。
      2)切片会逐条读入Map端进行计算,切片首先逐条读入到内存缓冲区,内存缓冲区大小为100M,会分为两个部分,一部分是80M,另一部分是20M;在放入缓冲区之时也对每条输入的数据“打标签”,即对数据进行分区,分区的目的是确定数据要去哪一个Reduce中被处理,一个分区数据对应一个ReduceTask。分区是由HashPartitioner分区器完成的,分区号的计算是将Map输出的key的hashcode与ReduceTask个数取模计算得到的。
    注意点: ①map task是一条一条的往buffer中去写,一旦写到80M,此时它会将这80M内存封锁,封锁后会对内存中的数据先进行combiner,然后进行排序,排序过程是先进行分区号排序然后再通过key值排序,将相同分区的数据放在一起,并且分区内部的数据也是有序的 。
                    ②进入buffer内存缓冲区之后的每一条记录是由三部分组成的:分区号、key、value
                    ③HDFS block块按照字节来切割,在存储的时候极有可能会乱码,为防止此情况的发生,一般会按完整记录 区划分,所有split一般会比block大几kb或者小几kb
      3)当内存中的combiner和sort过程结束后就开始溢写数据到磁盘上,此时磁盘就是一个根据分区号分好区的,并且内部有序的磁盘小文件,每进行一次溢写就会产生一个磁盘小文件。
      4)map task 计算完毕后,会将磁盘上的小文件合并成一个大文件,在合并的时候会使用归并排序的算法,将各个小文件合并成一个有序的大文件,大文件会根据分区号将内部不同分区文件提交给Reducce端;每一个map task都会经过刚才所说的所有过程,也就是每一个map task都会产生一个有分区的并且分区内部有序的大文件。
在这里插入图片描述
  Reduce Task流程:
      1)磁盘大文件交给Reduce Task处理,按分区拉取,把分区数据写入到内存中,分区数据内部是有序的,内存满了就会溢写,溢写之前会排序,溢写到磁盘的过程与Map端类似;当所有的数据拉取过来后,会将溢写产生的磁盘小文件合并和排序成有序的大文件,大文件按Key分组,相同的key为一组;Reduce Task只有一个结果文件,输出的内容是追加到文件的。
    注意点: 1)产生一个有序的大文件的目的是为了提高分组的分组效率;归根结底,四次排序都是为了提高分组的效率。
                   2)整个过程中,Map计算与Reduce计算之间的过程称为shuffle,即将数据进行分区并分发到相对应的RedudeTask;在MapTask的shuffle称为shuffleWrite,在ReduceTask的shuffle称为shuffleRead。
在这里插入图片描述

3.MapReduce运行架构
    1)MapReduce1.X运行架构
在这里插入图片描述
架构角色:  
             在这里插入图片描述

此架构的弊端:
    1.JobTracker既是资源调度主节点又是任务调度主节点,负载过重,易发生单点故障。
    2.资源管理与计算调度强耦合,其他框架需要重复实现资源管理
    3.不同框架对资源不能全局管理,会发生资源抢夺

    2)MapReduce2.X运行架构(Yarn资源调度器)
          ①主从架构的,主:ResourceManager(资源管理主节点,掌握整个集群的资源情况,主要负责资源调度)
                                   从:NodeManager(资源管理的从节点)
          主从节点通过心跳保持通信,主节点对从节点进行管理
          ②客户端操作,会在客户端上依据MapReduce的框架编写一个基于MapReduce的Application,会提交到集群中去运行:首先客户端会找nameNode,请求要计算数据的每一个block位置,客户端一次会生成一个列表(列表交给applicationMaster),列表信息是block的位置信息,会把task分配到相应的数据节点,若数据节点资源已满,就在有数据的节点所在机架上找一个节点进行运算,若节点资源还是满了,就随机找一个节点运行task。
          ③客户端生成列表后,会向resourceManager发送一个请求,请求启动一个applicationMaster(任务调度器,主要负责任务调度),当资源充足时,resourceManager会让nodeManager启动一个container容器(隔离出一个资源),在container 上启动一个applicationMaster(容器的主人,使用其资源)。
          ④applicationMaster拿到客户端的列表后会向ResourceManager请求资源,然后在有资源的节点上启动容器container,然后applicationMaster向容器中分发任务,container中会自动启动一个yarn-child计算进程(包含map task计算线程,map task完成过后在将磁盘文件交给reduce task),开始运行时,applicationMaster会监控每个任务,将任务信息返回给客户端。
         注意点: ResourceManager仍会出现单点故障,所以我们还会启动一个ResourceManager;ApplicationMaster一旦挂掉,ResourceManager会重新启动ApplicatonMaster,实现高可用;ResourceManager自身的高可用记住zooKeeper实现。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值