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

提及MapReduce,能够从思想、模型和运算及应用过程等几个方面来进行理解。首先,来简单说说它的思想。MapReduce能够说是凝结了人类对数据处理工做的基本思想,即分类与汇总。咱们都知道,MapReduce其实分为两个阶段,即map阶段和reduce阶段。map阶段即映射阶段,该阶段主要负责对数据进行切分处理,reduce阶段即归约阶段,也就是在map阶段的处理结果上进行汇总。咱们能够把它定位成一种用于大规模数据集并行运算的编程(算法)模型。
在实际应用中,MapReduce是Hadoop框架集群的核心之一,在HDFS的基础上对海量数据进行运算。先来分别看一下map和reduce的详细运算过程。java

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的运行情况,若是出问题,会将其在其余机器上重启。
 网络

相关文章
相关标签/搜索