MapReduce处理流程

  MapReduce是Hadoop2.x的一个计算框架,利用分治的思想,将一个计算量很大的作业分给很多个任务,每个任务完成其中的一小部分,然后再将结果合并到一起。将任务分开处理的过程为map阶段,将每个小任务的结果合并到一起的过程为reduce阶段。下面先从宏观上介绍一下客户端提交一个作业时,Hadoop2.x各个组件之间的联系及处理流程。然后我们再具体看看MapReduce计算框架在执行一个作业时,做了些什么。

YARN

YARN是Hadoop2.x框架下的资源管理系统,其组成部分为:

1)全局资源管理器(global resource manager):整个系统的资源管理和调配。

2)节点管理器(node manager)(每个节点都有一个)负责任务的启动、配置及其资源的监控

3)针对每个应用程序的应用程序管理器(application-specific application master)(因为Hadoop2.x支持的计算框架有很多,不只是MapReduce,还有像storm、spark、Tez不同处理机制的计算框架,所以MapReduce是一种应用程序,每个MapReduce作业是MapReduce类型程序的一个实例)

4)调度器(scheduler)(在资源管理器里)

5)容器(container):一部分CPU和内存组成一个容器,最为资源使用,一个应用程序运行在一组容器中。

在了解了各个组件的功能之后,借助下图,我们看一下提交一个作业的流程:

  

1)客户端向资源管理器提交作业程序,作业程序的类型决定了使用哪种应用程序管理器(MapReduce、storm、Tez...)

2)资源管理器协调资源,在一个节点上获取一个运行应用程序管理器实例的容器

3)应用程序管理器(application master)在资源管理器中注册

4)应用程序管理器通过资源请求与资源管理器协商资源,包括该容器所在的节点和该容器的详细说明(CPU核数量和内存大小)

5)和 6)应用程序管理器在一个节点上或者多个节点上运行其Map Task和Reduce Task

7)在容器中运行的应用程序向应用程序管理器汇报执行度

8)应用程序执行完毕,应用程序管理器就会从资源管理器中取消注册,作业占用的资源会释放到系统中

MapReduce计算框架

MapReduce总的可以分为map阶段、shuffle阶段和reduce阶段。

map阶段

1)从HDFS中将输入值传输到Mapper节点

除了传输之外,在读取过程中,还需要做一个转换过程,将数据转换为键值对的形式(MapReduce处理的输入必须为键值对的形式),这个过程通过InputFormat完成(默认为TextInputFormat

2)Mapper

根据自己写的Mapper函数对文件进行处理,同样输出的是键值对(如wordcount中统计收到的数据中每个词出现的次数)

3)Partitioner

Patitioner根据Reducer的数量和自定义的划分方法(没有自定义的话,Hadoop有默认实现)去划分Mapper的输出;划分的结果会按照Mapper输出的键进行排序。

4)Combiner(这一步是可选的)

经过Partitioner排序后,如果作业中配置了Combiner,就会调用Combiner,Combiner就好像在Mapper端提前进行一下Reducer一样。

那为什么要提前进行呢?这是为了尽量减少对网络带宽的需求,比如经典的wordcount程序,在Mapper端处理之后,我们可能得到一个像key = apple,value = {1,1,1,1,1,1}的结果,如果我们能先对其进行一下Combiner,那么就能得到key = apple,value = 6的结果,传输这样的数据,肯定是要比key = apple,value = {1,1,1,1,1,1}的数据节省带宽的。

那既然能够节省传输带宽,为什么又是可选的呢?何不每次都默认执行Combiner?这是因为并不是每一个Mapper都能进行Combiner;比如现在我们的任务要统计一段时间内的每天的最高气温,假设开始有两个Mapper,输出为(0,10,20)和(15,25),那么提前进行Combiner可以使得传递给Reducer端的数据为(20, 25)这样最后的结果还是为25,且传输的数据量变小;但是假如我们要求一段时间内的平均温度呢?如果开始就在Mapper端进行Combiner求平均温度,那么Reducer端得到的数据为(10, 20),算出的平均温度为15,但是实际上的平均温度为(0, 10, 20 , 15 ,25)的平均,为14;所以需要搞清楚Combiner合适不合适提前进行。

shuffle阶段

shuffle阶段要做的事就是保证Mapper输出的数据传输到合适的Reducer进行处理,如下图所示:

shuffle阶段,每个Reducer都会使用HTTP协议从Mapper节点获得自己的划分(Reducer通过Application Master来获取自己应该查询哪些Mapper节点来获取自己划分的信息,因为每个Mapper实例完成后,会通知Application Master运行阶段产生的划分)

reduce阶段

1)Reducer

根据自己写的reduce程序对数据进行处理(如wordcount中将每个单词出现的次数加起来得到总和)

2)将处理结果输出到HDFS

通过OutputFormat完成(默认是TextOutputFormat

总结

通过对Hadoop2.x框架的处理流程和MapReduce计算框架的处理流程的梳理,可以在进行程序编写时有一个更清楚的认识,下一步应该具体做些什么。

参考:《Hadoop权威指南》

    《Hadoop技术内幕》

时间: 2024-11-05 13:45:58

MapReduce处理流程的相关文章

大数据技术之_05_Hadoop学习_02_MapReduce_MapReduce框架原理+InputFormat数据输入+MapReduce工作流程(面试重点)+Shuffle机制(面试重点)

第3章 MapReduce框架原理3.1 InputFormat数据输入3.1.1 切片与MapTask并行度决定机制3.1.2 Job提交流程源码和切片源码详解3.1.3 FileInputFormat切片机制3.1.4 CombineTextInputFormat切片机制3.1.5 CombineTextInputFormat案例实操3.1.6 FileInputFormat实现类3.1.7 KeyValueTextInputFormat使用案例3.1.8 NLineInputFormat使

Hadoop二次排序及MapReduce处理流程实例详解

一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的,在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求.对于二次排序的实现,网络上已经有很多人分享过了,但是对二次排序的实现原理及整个MapReduce框架的处理流程的分析还是有非常大的出入,而且部分分析是没有经过验证的.本文将通过一个实际的MapReduce二次排序的例子,讲述二次排序的实现和其MapReduce的整个处理流程,并且通过结果和Map.

MapReduce运行流程分析

研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. 还是以最经典的WordCount程序作为基础,来分析map阶段.reduce阶段和最复杂的shuffle阶段. 文本1:hello world                                      文本2:map reduce hello hadoop            

016_笼统概述MapReduce执行流程结合wordcount程序

一.map任务处理 1 .读取输入文件内容,解析成key.value对.对输入文件的每一行,解析成key.value对.每一个键值对调用一次map函数. 2 .写自己的逻辑,对输入的key.value处理,转换成新的key.value输出.3. 对输出的key.value进行分区.4 .对不同分区的数据,按照key进行排序.分组.相同key的value放到一个集合中.5 .(可选)分组后的数据进行归约. 二.reduce任务处理 1.对多个map任务的输出,按照不同的分区,通过网络copy到不同

MapReduce执行流程

角色描述:JobClient:执行任务的客户端JobTracker:任务调度器TaskTracker:任务跟踪器Task:具体的任务(Map OR Reduce) 从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化.分配.执行.反馈.成功与失败的后续处理 每个阶段所做的事情大致如下 任务初始化 1.JobClient对数据源进行切片切片信息由InputSplit对象封装,接口定义如下: [java] view plaincopy public interface Input

Hadoop Mapreduce运行流程

Mapreduce的运算过程为两个阶段: 第一个阶段的map task相互独立,完全并行: 第二个阶段的reduce task也是相互独立,但依赖于上一阶段所有map task并发实例的输出: 这些task任务分布在多台机器运行,它的运行管理是有一个master负责,这个master由yarn负责启动,那么yarn如何知道启动多少个map task进程去计算呢? 下面概述一下Mapreduce的执行流程: 1.客户端首先会访问hdfs的namenode获取待处理数据的信息(文件数及文件大小),形

mapreduce运行流程总结

先上图,下图描绘了一个mapreduce程序的的一般运行过程和需要经过的几个阶段 大体上我们可以将mapreduce程序划分为inputformat ,map ,shuffle,reduce,outputformat五个阶段,下面我们会详细介绍各个阶段的具体的运行细节 以最简单的wordcount程序为例,本例使用基于hadoop2.6的环境,一般的api都使用mapreudce下的,注意不要使用mapred下的api可能会引起未知错误  惯例hello word程序 driver类,负责构建m

MapReduce 图解流程

Anatomy of a MapReduce Job In MapReduce, a YARN application is called a Job. The implementation of the Application Master provided by the MapReduce framework is called MRAppMaster. Timeline of a MapReduce Job This is the timeline of a MapReduce Job e

MapReduce 图解流程超详细解答(1)-【map阶段】

转自:http://www.open-open.com/lib/view/open1453097241308.html 在MapReduce中,一个YARN  应用被称作一个job, MapReduce 框架提供的应用,master的一个实现被称作MRAppMaster MapReduce Job的时间线 MapReduce Job  运行的时间线: Map Phase:若干 Map Tasks 被执行 Reduce Phase: 若干Reduce Tasks 被执行 reduce可能会在map