MapReduce概述

1、MapReduce是什么?(What is MapReduce)

      MapReduce是一个用于对海量数据并行计算的编程模型,核心操作是Map和Reduce

      Map: 负责把任务分解成多个任务
      Reduce: 负责把分解后的多任务处理的结果汇总起来。
      至于在并行编程中的其他复杂问题,如分布式存储、工作调度、负载均衡、容错处理、网络通信等,由MapReduce框架负责处理,而程序员可以不关心这些问题。

       MapReduce模式的思想是:将要自动分割执行的问题拆解成Map(映射)和Reduce(化简)的方式,在数据被分割后通过Map函数的程序将数据映射成不同的区块,分配给计算机集群处理达到分布式运算的效果,再通过Reduce函的程序将结果汇总,从而输出开发者需要的结果。
       MapReduce致力于解决大规模数据处理的问题,因此在设计之初就考虑了数据的局部性原理,利用局部性原理将整个问题分而治之。MapReduce集群由普通PC构成,为无共享式架构。在处理之前,将数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理,将处理后的数据进行合并、排序后再分发(至reduce节点),从而避免了大量数据的传输,提高了处理效率。无共享式架构的另一个好处是配合复制策略,集群可以具有良好的容错性,一部分节点对集群的正常工作不会造成影响。

2、MapReduce的集群行为
      MapReduce运行在大规模集群之上,要完成一个并行计算,还需要任务调度、本地计算、洗牌过程等一系列环节共同支撑的计算的过程,把上述过程称为MapReduce的集群行为。
   1)任务调度与执行
         MapReduce任务由一个JobTracker和多个TaskTracker两类节点控制完成。
        ①JobTracker节点
            JobTracker节点主要负责和管理TaskTracker,它通常是运行在master节点上的。JobTracker将Mapper和Reducer分配给空闲的TaskTracker后,由TaskTracker负责这些任务的并行执行。
        ②TaskTracker节点
            TaskTracker节点必须运行在DataNode节点上,所以说DataNode既是数据的存储节点,也是计算节点。
        ③JobTracker节点与TaskTracker之间的关系
            JobTracker负责监控任务的运行状况,如果某个TaskTracker发生故障,JobTracker就会将其负责的任务分配给其他空闲的TaskTracker重新运行。
   2)本地计算
        把计算节点和数据节点置于同一台计算机上,MapReduce框架尽量保证存储的数据节点执行计算任务,从而有效地减少了数据在网络中的传输,降低了对宽带的需求,避免了网络“瓶颈”。采用“本地计算”可以有效地节约宽带。在通常情况下split块应该小于或等于HDFS数据块的大小,从而保证了split不会跨越两台计算机存储,便于“本地计算”。
   3)shuffle洗牌过程
        MapReduce会将Mapper的输出结果安装key值分成R份,其中R是预先定义的 Reducers的个数,划分时常用哈希函数,如 Hash(Key)mod R。这样可以保证某一个范围内的key一定由某个Reducer来处理,从而简化Reduce的过程。
   4)合并Mapper输出

        MapReduce允许在shuffle之前先对结果进行合并,即将中间结果中有相同key值的多组<key,value>对合并成一对。Combine过程和Reduce过程类似,很多情况下可以直接使用reduce函数。但Combine过程是Mapper的一部分,在map函数之后执行。Combine过程可以有效地减少中间结果的数量,从而减少数据传输过程中的网络流量。值得注意的是,MapReduce并不保证其会对一个Mapper输出执行多少个Combine过程。

   5)读取中间结果
       在完成合并Combine和Shuffle的过程后,Mapper的输出结果被直接写到本地磁盘。然后通知JobTracker中间结果文件的位置,再由JobTracker告知Reducer到哪个DataNode上去取中间结果。注意所有的Mapper产生的中间结果均按key值用同一个哈希函数划分为R份,R个Reduce各自负责一段key值区间。每个Reduce需要向多个Mapper节点取得key值区间的中间结果,然后执行Reduce函数,最终形成一个结果文件。
   6)任务管道
   R个Reduce会产生R个结果,很多情况下着R个结果并不是所需要的最终结果,而是会将这R个结果作为另一个计算任务的输入,并开始另一个MapReduce的任务。
   
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值