浅析大数据分析中对MapReduce的理解

说起MapReduce,可以从思想、模型和运算及应用过程等几个方面来进行理解。首先,来简单说说它的思想。MapReduce可以说是凝结了人类对数据处理工作的基本思想,即分类与汇总。我们都知道,MapReduce其实分为两个阶段,即map阶段和reduce阶段。map阶段即映射阶段,该阶段主要负责对数据进行切分处理,reduce阶段即归约阶段,也就是在map阶段的处理结果上进行汇总。我们可以把它定位成一种用于大规模数据集并行运算的编程(算法)模型。

在实际应用中,MapReduce是Hadoop框架集群的核心之一,在HDFS的基础上对海量数据进行运算。先来分别看一下map和reduce的详细运算过程。


Map过程:

@Override  

   public void map(KEYIN key,VALUEIN value,Context context)    

           throws IOException,InterruptedException{      

      System.out.println("进入Map");  

      context.write(KEYOUT, VALUEOUT);  

   }   

这里KEYIN,VALUEIN就是在RecordReader中生成的Key和Value;这里KEYOUT,VALUEOUT就是map的输出。之后,Map的输出到Reduce的输入中间经过了一个复杂的过程:map的每个输出都会先写入缓存(buffer in memory,默认100MB,可以在job提交前通过io.sort.mb修改),该100MB的缓存有个阈值80MB(默认0.8)。注意,这里引入了第三个类Partition。


Reduce过程:

在map过程中强调数据在本地计算,即优先数据在哪就把map任务分配到哪。而reducer是需要从所有map的输出文件中把属于自己的copy过来,所以会占用网络带宽。从不同task tracker拿到的文件也是先写入buffer(原理同map的写入buffer),当buffer中的数据达到阈值,就写入磁盘。存数据的过程叫merge,merge过程可以发生在:

(1)内存到内存的merge。默认关闭,如果开启表示最后如果内存有数据,不会先全部写入磁盘再回头跟磁盘上的其它数据一起merge,而是直接在内存中merge,再与磁盘中的其它数据merge。

(2)内存到磁盘的merge。与map端的spill类似。

(3)磁盘到磁盘的merge。最后将所有(2)之后的文件进行最终merge,注意(1)的情况。

之后开始reduce的过程,即merge的最终输出是reduce的输入,reduce的输出默认是输出到HDFS上。输出格式由OutputFormat类确定。


在这里需要提及的是Yarn并不是MapReduce的替代者,它只是作为一种计算框架的资源管理系统而存在,所以在理解MapReduce的过程中,也应该了解其与Yarn的关系。尚学堂陈老师指出Yarn的存在有时会对MapReduce存在的问题进行一些补充:

1. Job Tracker存在单点故障;

2. Job Tracker完成太多任务,当MR任务非常多时,造成很大的内存开销;

3.Task Tracker端,如果两个大内存消耗的任务一起调度,容易出现OOM,如果只有Map任务或Reduce任务时会造成资源浪费。

那么Yarn的机制与MapReduce相比有哪些优势呢? 首先旧的MapReduce主要包括Job Tracker和Task Tracker,Yarn中主要是三个组件:Resource Manager、Node Manager和Application Master。Resource Manager负责全局资源分配,Application Master每个节点一个,负责当前节点的调度和协调。Node Manager是每台机器的代理,监控应用程序的资源使用情况,并汇报给Resource Manager。因此与MapReduce相比,Yarn把资源管理与任务调度的工作分离开来,减少了MapReduce中Job Tracker的压力。

从上面的讲述中不难看出,相对于MapReduce,Yarn也有其自身的优势: 

1.Yarn大大减少了Job Tracker的资源消耗,并且让监测每个Job子任务状态的程序分布式化了;

2.YARN中Application Master是一个可变更部分,用户可以对不同编程模型编写自己的AppMst,让更多类型的编程模型能跑在Hadoop集群中;

3.在旧的框架里,Job Tracker一个很大的负担就是监控Job下任务的运行状况,现在由Application Master去做,而Resource Manager是监测Application Master的运行状况,如果出问题,会将其在其他机器上重启。

你可能感兴趣的:(浅析大数据分析中对MapReduce的理解)