MapReduce作业的工作原理
在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作业的工作原理的更多相关文章
- MapReduce框架原理-OutputFormat工作原理
OutputFormat概述 OutputFormat主要是用来指定MR程序的最终的输出数据格式 . 默认使用的是TextOutputFormat,默认是将数据一行写一条数据,并且把数据放到指定的输出 ...
- 经典MapReduce作业和Yarn上MapReduce作业运行机制
一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...
- MapReduce程序的工作过程
转自:http://www.aboutyun.com/thread-15494-1-2.html 问题导读1.HDFS框架组成是什么?2.HDFS文件的读写过程是什么?3.MapReduce框架组成是 ...
- Java --本地提交MapReduce作业至集群☞实现 Word Count
还是那句话,看别人写的的总是觉得心累,代码一贴,一打包,扔到Hadoop上跑一遍就完事了????写个测试样例程序(MapReduce中的Hello World)还要这么麻烦!!!?,还本地打Jar包, ...
- MapReduce on Yarn运行原理
一.概念综述 MapReduce是一种可用于数据处理的编程模型(或计算模型),该模型可以比较简单,但想写出有用的程序却不太容易.MapReduce能将大型数据处理任务分解成很多单个的.可以在服务器集群 ...
- MapReduce工作原理图文详解
目录:1.MapReduce作业运行流程2.Map.Reduce任务中Shuffle和排序的过程 1.MapReduce作业运行流程 流程示意图: 流程分析: 1.在客户端启动一个作业. 2.向Job ...
- MapReduce工作原理讲解
第一部分:MapReduce工作原理 MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•TaskT ...
- MapReduce工作原理
第一部分:MapReduce工作原理 MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•Tas ...
- MapReduce工作原理图文详解 (炼数成金)
MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...
随机推荐
- 清华机试中手机键盘问题求解 java 和 c
题目描述:按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次.如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需 ...
- python基础—字符串的常用函数“”
#字符串常用语法name = "wang yan li"print(name.capitalize())#首字母大写print(name.count("n")) ...
- arch xfce快捷键
<Alt>F1:xfce4-popup-applicationsmenu 打开右键菜单 <Alt>F2:xfrun4 打开应用程序运行窗口,同<Alt>F3差不多 ...
- QT自定义控件系列(二) --- Loading加载动画控件
本系列主要使用Qt painter来实现一些基础控件.主要是对平时自行编写的一些自定义控件的总结. 为了简洁.低耦合,我们尽量不使用图片,qrc,ui等文件,而只使用c++的.h和.cpp文件. 由于 ...
- 实际操作中遇到的问题--Django中查看已安装的包的相关命令
pip freeze --------查看已经安装的包 pip uninstall 安装包名 ---------卸载已安装的包 pip install 安装包名--------安装包
- outlook2010设置失败后重新设置
1.WIN+R ,然后在弹出框中输入outlook /importprf .\.prf 2.重新设置.
- php中的内存管理的介绍(转)
本篇文章给大家带来的内容是关于php中的内存管理的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.php内存管理概述——Zend引擎 由于计算机的内存由操作系统进行管理,所以 ...
- 04bootstrap_表单
03bootstrap_表单 表单的基本实例 1.默认表单:form 表单域 fieldset legend label 提示span class="help-block" 2.基 ...
- ubuntu18.04 配置chrome ss
为了FQ 不FQ不行啊 安装shaowsocks 1. 用实验室的服务器 sslocal -c xxx.json 2. 下载SwitchyOmega插件 链接: https://pan.baidu.c ...
- Sublime3安装及配置
1.官网下载 2.安装后输入密钥 ----- BEGIN LICENSE -----sgbteamSingle User LicenseEA7E-11532598891CBB9 F1513E4F 1A ...