Map/Reduce 工作机制分析 --- 作业的执行流程
前言
从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情。
那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易" 地实现分布式运行?
Map/Reduce 任务执行总流程
经过之前的学习,我们已经知道一个 Map/Reduce 作业的总流程为:
代码编写 --> 作业配置 --> 作业提交 --> Map任务的分配和执行 --> 处理中间结果(Shuffle) --> Reduce任务的分配和执行 --> 作业完成
如下图所示:

Map/Reduce 框架中的四大实体
1. 客户端
负责编写代码,配置作业,提交作业。任何节点都可以充当客户端。
2. JobTracker (1个)
作业中心控制节点,一般一个集群就一个JobTracker。
3. TaskTracker (很多个)
作业具体执行节点,可以分为Map节点和Reduce节点两大类。
4. HDFS
分布式文件系统,保存从作业提交到完成需要的各种信息。
阶段一:提交作业阶段
1. 首先,开发人员编写好程序代码,配置好输入输出路径,Key/Value 类型等等。(这部分是人为控制阶段,接下来的所有操作都是Hadoop完成的了)
2. 从JobTracker处获取当前的作业ID号
3. 检查配置合法性 (如输入目录是否存在等)
4. 计算作业的输入划分,并将划分信息写入到Job.split文件。
5. 将运行作业需要的所有资源都复制到HDFS上。
6. 通知JobTracker准备完毕,可以执行作业了。
阶段二:初始化作业阶段
这个阶段,JobTracker将为作业创建一个对象,专门监控它的运行。
并根据Job.split文件(上一步生成)来创建并初始化Map任务和Reduce任务。
阶段三:分配任务
JobTracker和TaskTracker之间通信和任务分配是通过心跳机制来完成的,每个TaskTracker作为一个单独的JVM执行一个简单的循环。
TaskTracker每隔一段时间都会向JobTracker汇报它的任务进展报告,JobTracker在收到进展报告以后如果发现任务完成了,就会给它再分配新的任务。
一般来说TaskTracker有个任务槽,它是有容量限制的 - 只能装载一定个数的Map/Reduce任务。
这一步和下一步,就形成一次心跳。
阶段四:执行任务
这一步的主体是TaskTracker,主要任务是实现任务的本地化。
具体步骤如下:
1. 将job.split复制到本地
2. 将job.jar复制到本地
3. 将job的配置信息写入到job.xml
4. 创建本地任务目录,解压job.jar
5. 发布任务并在新的JVM里执行此任务。
6. 最后将计算结果保存到本地缓存
小结
本文细致分析了Map/Reduce的作业执行流程。
但在流程的执行过程当中,数据的具体流动途径也是需要仔细分析的 - 是存放在本地磁盘,还是HDFS?
另外,还需要做好错误处理 - 比如说某个节点坏了怎么办?
这些将在后面的两篇文章中做出分析和介绍。
Map/Reduce 工作机制分析 --- 作业的执行流程的更多相关文章
- 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- Map/Reduce 工作机制分析 --- 数据的流向分析
前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...
- 第十篇:Map/Reduce 工作机制分析 - 数据的流向分析
前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...
- Map/Reduce 工作机制分析 --- 错误处理机制
前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...
- 第十一篇:Map/Reduce 工作机制分析 - 错误处理机制
前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...
- MapReduce作业的执行流程
MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...
- Yii2 源码分析 入口文件执行流程
Yii2 源码分析 入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...
- MapReduce启动的Map/Reduce子任务简要分析
对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程. ...
- Java IO工作机制分析
Java的IO类都在java.io包下,这些类大致可分为以下4种: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...
随机推荐
- SerialChat与Arduino的配合使用
最近在开发过程中,用到了Arduino开发板以及其IDE:Arduino,这个IDE使用起来很方便,编码也很简单,但有一点美中不足的是Arduino只能输出数值,不能绘图,所以就用到了另外一款串口调试 ...
- Cheatsheet: 2015 05.01 ~ 05.31
.NET .NET on Mac for the OS X n00b without Mono via Visual Studio Code Microsoft frameworks deprecat ...
- 【java】定时器
总结 1.执行计划的任务放在TimerTask的子类中,由Timer进行该任务. 2.创建一个Timer就是启动一个新的线程,直至Timer里的任务执行完毕,才会结束.希望创建的线程为守护线程,则创建 ...
- shell awk入门
本文参考自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/11/2586985.html awk:好用的数据处理工具 awk 也是一个非常棒的数据处 ...
- 深入浅出设计模式——桥接模式(Bridge Pattern)
模式动机设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色.绿色.蓝色等,此时至少有如下两种设计方案: 第一种设计方案是为每一种形状都提供一套 ...
- Postman 安装及使用入门教程
安装 本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,http ...
- ASP.NET MVC Html.Partial/Html.RenderPartial/Html.Action/Html.RenderAction区别
1. @Html.Raw() 方法输出带有html标签的字符串: <div style="margin:10px 0px 0px;border:1px;border-color:red ...
- myeclipse/eclipse没有Project Facets的解决方法
http://www.cnblogs.com/jerome-rong/archive/2012/12/18/2822783.html 经常在eclipse中导入web项目时,出现转不了项目类型的问题, ...
- js高级程序设计(五)引用类型
Object类型 创建Object 实例的方式有两种.第一种是使用new 操作符后跟Object 构造函数. var person = new Object(); person.name = &quo ...
- 0502团队项目 SCRUM团队成立
Scrum团队成立 团队名称:对不对?队 团队目标:短期目标,完成O2O模式的第一个平台 团队口号:我们都不是神的孩子 团队照: 角色分配 产品负责人: 许佳仪.决定开发内容和优先级排序,最大化产品以 ...