第九篇: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 和 ...
随机推荐
- boost编译随笔
boost下载地址 编译 生成bjam.exe 1.下载boost源码,可以直接使用上面给出的1.60.0版本 2.解压下载到的boost文件,例如解压到 x:\boost_1_60_0 3.使用Vi ...
- VS2010+opencv2.4.10+gsl_1.8配置实现RobHess的SIFT程序
最近在做sift方面的毕业设计,弄了一天终于把RobHess的SIFT程序调通了.虽然网上有很多相关博文,但是我还是想把我的调试的过程跟大家分享一下.由于工程没法在博文上传,所以有需要的可以在下方留言 ...
- c语言环境初始化&c语言和汇编混合编程
bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...
- canvas常用api
1. 在canvas标签中给出长宽(不带单位):<canvas width="600" height="600"></canvas> 或 ...
- PHP生成图片验证码、点击切换实例
http://www.jb51.net/article/51506.htm 现在让我们来看下 PHP 代码 复制代码代码如下: <?php session_start();function ra ...
- GitHub中开启二次验证Two-factor authentication,如何在命令行下更新和上传代码
最近在使用GitHub管理代码,在git命令行管理代码时候遇到一些问题.如果开起了二次验证(Two-factor authentication两个要素认证),命令行会一直提示输入用户名和密码.查找了一 ...
- egametang启动配置
egametang的启动配置文件可以在Unity的Tools->命令行配置中修改保存然后启动 如果需要添加自定义的启动配置项目,只需要修改客户端的 ServerCommandLineEditor ...
- 在Mac下配置Maven环境
下载Maven安装文件,(http://maven.apache.org/download.html)如:apache-maven-3.5.0-bin.zip,然后解压到本地目录. 打开 .bash_ ...
- MysqL读写分离的实现-Mysql proxy中间件的使用
为什么要架设读写分离,这里不做多余的说明,想了解具体原理,请百度或者参考其他帖子.在这里只做大概的配置说明,测试中使用三台服务器 192.168.136.142 主服务器 192.168.136. ...
- 1.10 tuple 元组
元组(tuple)属于不可变序列 tuple特性: 特性一:可包含任意对象的有序集合 特性二:通过下标索引访问元素 特性三:固定长度,异质,可任意嵌套 特性四:不支持原位改变 特性五:存储机制:对象引 ...