`
退役的龙弟弟
  • 浏览: 446367 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapReduce执行流程

 
阅读更多

转自:http://blog.csdn.net/javaman_chen/article/details/8576028

 

MapReduce的大体流程是这样的,如图所示:

由图片可以看到mapreduce执行下来主要包含这样几个步骤
1.首先对输入数据源进行切片
2.master调度worker执行map任务
3.worker读取输入源片段
4.worker执行map任务,将任务输出保存在本地
5.master调度worker执行reduce任务,reduce worker读取map任务的输出文件
6.执行reduce任务,将任务输出保存到HDFS

若对流程细节进行深究,可以得到这样一张流程图

角色描述:
JobClient:执行任务的客户端
JobTracker:任务调度器
TaskTracker:任务跟踪器
Task:具体的任务(Map OR Reduce)

 

mapreduce执行流程自己的理解:

1、执行一个mapreduce程序

2、jobclient将作业需要的文件上传到hdfs,并将文件数据进行分片(inputt split)

3、jobtracker对作业进行初始化,并调用tasktracker执行map task,map task不断从对应的split解析出一个个key/value,并调用map()方法处理,处理完后根据reduce task个数将结果分层若干分片(partition)写到本地磁盘。

4、jobtracker调用tasktracker执行reduce task,reduce task从每个map task读取属于自己的partition,然后对相同key的数据进行聚集排序,生成key,value list。并调用reduce()方法。最后将结果输出到文件中

 


从生命周期的角度来看,mapreduce流程大概经历这样几个阶段:初始化、分配、执行、反馈、成功与失败的后续处理

每个阶段所做的事情大致如下

任务初始化

1.JobClient对数据源进行切片
切片信息由InputSplit对象封装,接口定义如下:

[java] view plaincopy
  1. public interface InputSplit extends Writable {  
  2.     long getLength() throws IOException;  
  3.     String[] getLocations() throws IOException;  
  4. }  

可以看到split并不包含具体的数据信息,而只是包含数据的引用,map任务会根据引用地址去加载数据
InputSplit是由InputFormat来负责创建的

[java] view plaincopy
 
  1. public interface InputFormat<K, V> {  
  2.     InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;  
  3.     RecordReader<K, V> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;  
  4. }  

JobClient通过getSplits方法来计算切片信息,切片默认大小和HDFS的块大小相同(64M),这样有利于map任务的本地化执行,无需通过网络传递数据
切片成功后,JobClient会将切片信息传送至JobTracker
2.通过jobTracker生成jobId
    JobTracker.getNewJobId()
3.检查输出目录和输入数据源是否存在
    输出目录已存在,系统抛出异常
    输入源目录不存在,系统抛出异常
4.拷贝任务资源到jobTracker机器上(封装任务的jar包、集群配置文件、输入源切片信息)

任务分配

JobTracker遍历每一个InputSplit,根据其记录的引用地址选择距离最近的TaskTracker去执行,理想情况下切片信息就在TaskTracker的本地,这样节省了网络数据传输的时间
JobTracker和TaskTracker之间是有心跳通信的逻辑的,通过彼此间不停的通信,JobTracker可以判断出哪些TaskTracker正在执行任务,哪些TaskTracker处于空闲状态,以此来合理分配任务

任务执行

TaskTracker接到任务后开始执行如下操作:
1.将任务jar包从HDFS拷贝到本地并进行解压
2.创建一个新的JVM来执行具体的任务,这样做的好处是即使所执行的任务出现了异常,也不会影响TaskTracker的运行使用


如果所执行的任务是map任务,则处理流程大致如下:
首先加载InputSplit记录的数据源切片,通过InputFormat的getRecordReader()方法
获取到Reader后,执行如下操作:

[java] view plaincopy
  1. K key = reader.createKey();  
  2. V value = reader.createValue();  
  3. while (reader.next(key, value)) {//遍历split中的每一条记录,执行map功能函数  
  4.     mapper.map(key, value, output, reporter);  
  5. }  

执行反馈

mapreduce的执行是一个漫长的过程,执行期间会将任务的进度反馈给用户
任务结束后,控制台会打印Counter信息,方便用户以全局的视角来审查任务

执行成功

清理MapReduce本地存储(mapred.local.dir属性指定的目录)
清理map任务的输出文件

执行失败

1.如果task出现问题(map或者reduce)
错误可能原因:用户代码出现异常;任务超过mapred.task.timeout指定的时间依然没有返回
错误处理:
首先将错误信息写入日志
然后jobtracker会调度其他tasktracker来重新执行次任务,如果失败次数超过4次(通过mapred.map.max.attempts和mapred.reduce.max.attempts属性来设置,默认为4),则job以失败告终
如果系统不想以这种方式结束退出,而是想通过Task成功数的百分比来决定job是否通过,则可以指定如下两个属性
mapred.max.map.failures.percent            map任务最大失败率
mapred.max.reduce.failures.percent        reduce任务最大失败率
如果失败比率超过指定的值,则job以失败告终

2.如果是tasktracker出现问题
判断问题的依据:和jobtracker不再心跳通信
jobtracker将该tasktracker从资源池中移除,以后不在调度它

3.jobtracker出现问题
jobtracker作为系统的单点如果出现问题也是最为严重的问题,系统将处于瘫痪

分享到:
评论

相关推荐

    MapReduce执行流程和Shuffle过程

    本节将对 Hadoop MapReduce 的工作机制进行介绍,主要从 MapReduce 的作业执行流程和 Shuffle 过程方面进行阐述。通过加深对 MapReduce 工作机制的了解,可以使程序开发者更合理地使用 MapReduce 解决实际问题。 ...

    MapReduce作业运行流程

    TaskTracker:定期与JobTracker通信,执行Map和Reduce任务 HDFS:保存作业的数据、配置、jar包、结果 作业运行流程 1.在客户端启动一个作业。 2.向JobTracker请求一个Job ID。 3.将运行作业所需要的资源文件复制到...

    Hadoop从入门到上手企业开发

    060 MapReduce执行流程之Shuffle和排序流程以及Map端分析 061 MapReduce执行流程之Reduce端分析 062 MapReduce Shuffle过程讲解和Map Shuffle Phase讲解 063 Reduce Shuffle Phase讲解 064 源代码跟踪查看Map Task和...

    分布式计算框架MapReduce

    本文来自于51cto,文章介绍了MapReduce是什么、MapReduce执行流程以及MapReduce1.x架构和MapReduce2.x架构等相关内容。MapReduce源自Google的MapReduce论文,论文发表于2004年12月。HadoopMapReduce可以说是...

    Hadoop中MapReduce基本案例及代码(五)

    下面详细介绍MapReduce中Map任务Reduce任务以及MapReduce的执行流程。 Map任务: 读取输入文件内容,解析成key,value对。对输入文件的每一行,解析成key,value对。每一个键值对调用一次map函数。 写自己的逻辑,对...

    Mapreduce实验报告.doc

    框架的基本结构和执行流程 基本结构 Mapreduce框架的主要程序分为三种即Master,Map和Reduce。 1. Master:主要功能有两个,任务的分割和任务的调度。Master把输入文件切成许 多个split,每个split文件一般为几十M...

    MapReduce处理流程

    一个 MapReduce 作业的输入和输出类型如下图所示:可以看出在整个标准的流程中,会有三组键值对类型的存在。 MapReduce 的处理流程 mapper执行过程  第一阶段是把输入目录下文件按照一定的标准逐个进行逻辑...

    云计算中的MapReduce技术

    ),分析了MapReduce的基本原理,并以字数统计为例,详细介绍了作业提交、映射任务分配、映射任务执行、归约任务分配、排序、归约任务执行、作业完成等7大MapReduce计算流程,最后描述了MapReduce在云计算中的重要作用。

    java大数据作业_5Mapreduce、数据挖掘

    课后作业 ...5.简述mapreduce流程 6.简述二次排序算法 有输入数据如下所示: 1 2 2 3 2 1 4 6 3 1 3 8 3 2 需要使用二次排序算法,得到如下处理结果: 1 2 2 1 2 3 3 1 3 2 3 8 4 6 请简述处理过程

    论文研究-基于Mapreduce的点度中间度算法研究 .pdf

    基于Mapreduce的点度中间度算法研究,杨成,,本文阐述了社会网络分析中的点度中间度的定义及计算原理,结合MapReduce的执行流程,设计了基于MapReduce的点度中间度的算法。设计的要

    Hadoop_HDFS和MapReduce架构浅析_郝树魁.pdf

    重点介绍了Hadoop MapReduce的工作机制,并以作业提交、作业初始化、任务分配、任务执行和任务进度更新等流程介绍了Job Client、JobTracker、TaskTracker和HDFS在MapReduce过程中的分工与协作,最后,对云计算作出展望...

    流程图+方框图剖析大数据技术(HDFS&Hadoop; MapReduce)

    计算机集群中的每个节点既是存储节点,也是运算节点,HDFS将大数据文件分布存储在集群中的各个节点,并通过MapReduce编程框架将用户定义的算法“输送”至各数据节点执行运算。实现了更广泛更灵活的运算与存储资源的...

    map reduce 源码分析流程

    map reduce的全部执行流程,源码分析视图

    Hadoop-MapReduce-学习资料及文档.zip

    内容概要: mr执行笔记; mapreduce框架的规范; wc流程.xls; wordcount的伪代码; yarn提交job的源码流程; YARN中提交job的详细流程; 打开流的关键代码; 打开流的调用流程; 日志格式;

    HiveDriver源码执行流程分析

    接着上一篇来说执行入口的分析,CliDriver最终将用户指令command提交给了Driver的run方法(针对常用查询语句而言),在这里用户的command将会被编译,优化并生成MapReduce任务进行执行。所以Driver也是Hive的核心,...

    AprioriTid算法的MapReduce并行化实现

    为解决AprioriTid算法对大数据执行效率不高的问题,根据Hadoop平台的MapReduce模型,分析了AprioriTid算法的并行化方法,给出了并行化的主要步骤和Map、Reduce函数的描述。与串行的AprioriTid算法相比,并行算法利用...

Global site tag (gtag.js) - Google Analytics