在Hadoop中,我们可以通过Job对象的submit()方法来运行MapReduce作业,也可以调用waitForCompletion()用于提交以前没有提交过的作业,并等待它的完成。其中,submit()方法调用封装了大量的处理细节,如下图所示:

   

在最高层,有5个独立的实体。

客户端,提交MapReduce作业;

YARN资源管理器,负责协调集群上计算机资源的分配;

YARN节点管理器,负责启动和监视集群中机器上的计算容器(container);

MapReduce的application master,负责协调运行MapReduce作业的任务,它和MapReduce任务在容器中运行,这些容器由资源管理器分配并由节点管理器进行管理;

分布式文件系统(一般为HDFS),用来与其他实体间共享作业文件。

1 作业的提交

Job的submit()方法创建一个内部的JobSummiter实例,并且调用其submitJobInternal()方法。提交作业后,waitForCompletion()每秒轮询作业的进度,如果发现自上次报告后有改变,便把进度报告到控制台。作业完成后,如果成功,就显示作业计数器;如果失败,则导致作业失败的错误被记录到控制台。

JobSummiter所实现的作业提交过程如下:

① 向资源管理器请求爱一个新应用ID,用于MapReduce作业ID;

② 检查作业的输出说明;

③ 计算作业的输入分片;

④ 将运行作业所需要的资源(包括作业JAR文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下的共享文件系统中;

⑤ 通过调用资源管理器的submitApplication()方法提交作业。

2 作业的初始化

资源管理器收到调用它的submitApplication()消息后,便将请求传递给YARN调度器。调度器分配一个容器,然后资源管理器在节点管理器的管理下载容器中启动application master的进程。

MapReduce作业的application master是一个Java应用程序,它的主类是MRAppMaster。由于将接受来自任务的进度和完成报告,因此application master对作业的初始化是通过创建多个簿记对象以保持对作业进度的跟踪来完成的。

接下来,它接受来自共享文件系统的、在客户端计算的输入分片。然后对每一个分片创建一个map任务对象以及由mapreduce.job.reduces属性确定的多个reduce任务对象。任务ID在此时分配。

最后,在任何任务运行之前,application master调用setupJob()方法设置OutputCommitter。

3 任务的分配

application master为不适合作为uber运行的作业中的所有map任务和reduce任务向资源管理器请求容器。首先为Map任务发出请求,该请求优先级要高于reduce任务的请求,这是因为所有的map任务必须在reduce的排序阶段能够启动前完成。直到有5%的map任务已经完成时,为reduce任务的请求才会发出。

reduce任务能够在集群中运行,但是map任务的请求有着数据本地化局限。

4 任务的执行

一旦资源管理器的调度器为任务分配了一个特定节点上的容器,application master就通过与节点管理器通信来启动容器。该任务由主类为YarnChild的一个Java应用程序执行。在它运行任务之前,首先将任务需要的资源本地化,包括作业的配置、JAR文件和所有来自分布式缓存的文件。最后,运行map任务或reduce任务。

5 进度和状态的更新

一个作业和它的每个任务都有一个状态,包括:作业或任务的状态、map和reduce的进度作业计数器的值、状态消息或描述。

任务在运行时,对其进度保持追踪。对map任务,任务进度是已处理输入所占的比例。对reduce任务,系统会估计已处理reduce输入的比例,整个过程分成三部分,与shuffle的三个阶段相对应(复制、排序、执行)。

任务也有一组计数器,负责对任务运行过程中各个事件进行计数。当map任务或reduce任务运行时,子进程和父application master通过umbilical接口通信。每隔3秒钟,任务通过这个umbilical接口向自己的application master报告进度和状态,application master会形成一个作业的汇聚视图。

6 作业的完成

当application master收到最后一个任务已完成的通知后,便把作业的状态设置为“成功”。然后,在Job轮询状态时,便知道任务已成功完成,于是Job打印一条消息告知用户,然后从waitForCompletion()方法返回。Job的统计信息和计数值也是在这个时候输出到控制台。

最后,作业完成时,application master和任务容器清理其工作状态,OutputCommitter的commitJob()方法会被调用。

MapReduce作业的工作原理的更多相关文章

  1. MapReduce框架原理-OutputFormat工作原理

    OutputFormat概述 OutputFormat主要是用来指定MR程序的最终的输出数据格式 . 默认使用的是TextOutputFormat,默认是将数据一行写一条数据,并且把数据放到指定的输出 ...

  2. 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...

  3. MapReduce程序的工作过程

    转自:http://www.aboutyun.com/thread-15494-1-2.html 问题导读1.HDFS框架组成是什么?2.HDFS文件的读写过程是什么?3.MapReduce框架组成是 ...

  4. Java --本地提交MapReduce作业至集群☞实现 Word Count

    还是那句话,看别人写的的总是觉得心累,代码一贴,一打包,扔到Hadoop上跑一遍就完事了????写个测试样例程序(MapReduce中的Hello World)还要这么麻烦!!!?,还本地打Jar包, ...

  5. MapReduce on Yarn运行原理

    一.概念综述 MapReduce是一种可用于数据处理的编程模型(或计算模型),该模型可以比较简单,但想写出有用的程序却不太容易.MapReduce能将大型数据处理任务分解成很多单个的.可以在服务器集群 ...

  6. MapReduce工作原理图文详解

    目录:1.MapReduce作业运行流程2.Map.Reduce任务中Shuffle和排序的过程 1.MapReduce作业运行流程 流程示意图: 流程分析: 1.在客户端启动一个作业. 2.向Job ...

  7. MapReduce工作原理讲解

    第一部分:MapReduce工作原理 MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•TaskT ...

  8. MapReduce工作原理

    第一部分:MapReduce工作原理   MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•Tas ...

  9. MapReduce工作原理图文详解 (炼数成金)

    MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...

随机推荐

  1. js 小数取整数

    1.丢弃小数部分,保留整数部分 parseInt() 22.127456取成22.13   parseInt(5/2) 2  向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入 ...

  2. django项目中购物车的实现

    对于做项目而言,最重要的是分析清楚自己负责模块的思路,确定思路后,把每一步实现的步骤确定后,根据步骤,去实现代码,测试. 购物车的逻辑:    登录用户可以添加购物车,未登陆用户页可以添加到购物车   ...

  3. 网络知识--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明:一.OSI七层网络协议OSI是Open System Int ...

  4. JS 获取图片标签和所有的图片中的src的正则表达式

    var imgReg = /<img.*?(?:>|\/>)/gi; //匹配所有img标签的正则表达式规则 var srcReg = /src=[\'\"]?([^\'\ ...

  5. 爬虫基础之urllib库(代码演示)

    # 自定义opener   from urllib.request import ProxyHandler,build_opener from urllib.error import URLError ...

  6. python_ 基本语法

    一.基础知识: 1.鸡汤 摘抄至 :简明 python 教程 在人生中取得成功,与其说靠天才与机会,不如说靠专注与毅力! Python 特点:简单.易于学习(简单得语法体系).自由且开发.高级语言.跨 ...

  7. js 数字随机滚动(数字递增) 每日凌晨回到原点,重新计算

    html: <div class="textMon"> <!--<img src="./img/20180830160315.png" ...

  8. NoSQL、memcached介绍、安装memcached、查看memcached状态

    1.NoSQL 2.memcached介绍     3.安装memcached(二进制包安装) yum install -y memcached libmemcached libevent (若没有安 ...

  9. MySQL-02-进阶

    大纲 1)数据约束 2)数据库设计(表设计) 3)存储过程 4)触发器 5)mysql权限问题 数据约束 2.1什么数据约束 对用户操作表的数据进行约束 2.2 默认值 作用: 当用户对使用默认值的字 ...

  10. CCS的文本及字体

    1.文本 CSS 文本属性可定义文本的外观 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. 缩进文本 把 Web 页面上的段落的第一行缩进,这是一种最常用的文 ...