前言

从运行我们的 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 工作机制分析 - 作业的执行流程的更多相关文章

  1. Map/Reduce 工作机制分析 --- 作业的执行流程

    前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...

  2. 第十篇:Map/Reduce 工作机制分析 - 数据的流向分析

    前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...

  3. Map/Reduce 工作机制分析 --- 数据的流向分析

    前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...

  4. 第十一篇:Map/Reduce 工作机制分析 - 错误处理机制

    前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...

  5. Map/Reduce 工作机制分析 --- 错误处理机制

    前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...

  6. MapReduce作业的执行流程

    MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...

  7. Yii2 源码分析 入口文件执行流程

    Yii2 源码分析  入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...

  8. MapReduce启动的Map/Reduce子任务简要分析

      对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程.   ...

  9. Java IO工作机制分析

    Java的IO类都在java.io包下,这些类大致可分为以下4种: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...

随机推荐

  1. 理解Java Integer的缓存策略【转】

    本文由 ImportNew - 挖坑的张师傅 翻译自 javapapers.欢迎加入翻译小组.转载请见文末要求. 本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的 ...

  2. zabbix如何监控进程

    zabbix中item的配置如下: zabbix中trigger的配置如下:

  3. Linux 获取本机IP、MAC地址用法大全

    getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...

  4. 940C Phone Numbers

    传送门 题目大意 给你两个数字n和k,给你一个字符串s,n是s的长度,求字母集合是s的字母集合子集的字典序大于s的长度为k的字典序最小的字符串t 分析 将字符转化为数字,然后分两种情况处理: 1.n& ...

  5. 多线程中join()的用法

    Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public class TestThread5 { public static void main(String ...

  6. Redis缓存 序列化对象存储乱码问题

    使用Redis缓存对象会出现下图现象: 键值对都是乱码形式. 解决以上问题: 如果是xml配置的 我们直接注入官方给定的keySerializer,valueSerializer,hashKeySer ...

  7. 【转】磁盘I/O那些事

    背景 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时 ...

  8. Java注释用处

    1.Java注释: import cn.lonecloud.Doc; /** * Created by lonecloud on 2017/8/17. * 测试注释类型 {@link Doc#test ...

  9. Hibernate学习(四)get和Load比较

    package cn.lonecloud.test.crud; import org.hibernate.HibernateException; import org.hibernate.Sessio ...

  10. Eclipse (eclipse-jee-luna-SR2-win32)4.4.2 , jdk1.7, pydev 4.5.5版本的 完成的python环境集成

    说明: 下面的搭建python2.x环境需要的条件: jdk1.7 eclipse(版本小于4.5) pydev(版本小于5.0) Eclipse和PyDev搭建完美Python开发环境 Window ...