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?

  另外,还需要做好错误处理 - 比如说某个节点坏了怎么办?

  这些将在后面的两篇文章中做出分析和介绍。

  

时间: 2024-10-03 13:45:42

Map/Reduce 工作机制分析 --- 作业的执行流程的相关文章

第九篇:Map/Reduce 工作机制分析 - 作业的执行流程

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

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

前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? 这就是本文探讨的话题. Shuffle 在Map进行完计算后,将会让数据经过一个名为Shuffle的过程交给Reduce节点: 然后Reduce节点在收到了数据并完成了自己的计算后,会将结果输出到Hdfs. 那么,什么是Shuffle阶段,它具体做什么事情? 需要知道,这可是Hadoop最为核心的

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

前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? 这就是本文探讨的话题. Shuffle 在Map进行完计算后,将会让数据经过一个名为Shuffle的过程交给Reduce节点: 然后Reduce节点在收到了数据并完成了自己的计算后,会将结果输出到Hdfs. 那么,什么是Shuffle阶段,它具体做什么事情? 需要知道,这可是Hadoop最为核心的

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

前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件故障可以分为两种 - JobTracker节点损坏和TaskTracker节点损坏. 1. JobTracker节点损坏 这是Hadoop集群中最为严重的错误. 出现了这种错误,那就只能重新选择JobTracker节点,而在选择期,所有的任务都必须停掉,而且当前已经完成了的任务也必须通通重来. 2.

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

前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件故障可以分为两种 - JobTracker节点损坏和TaskTracker节点损坏. 1. JobTracker节点损坏 这是Hadoop集群中最为严重的错误. 出现了这种错误,那就只能重新选择JobTracker节点,而在选择期,所有的任务都必须停掉,而且当前已经完成了的任务也必须通通重来. 2.

Android7.0 Vold 进程工作机制分析之整体流程

Android7.0 Vold 进程工作机制分析之整体流程 一.Vold简介 Vold是Volume Daemon的缩写,负责管理和控制Android平台外部存储设备,包括SD插拨.挂载.卸载.格式化等.它是通过init进程解析init.rc脚本所启动的进程.它处于Native层. 二.基础架构 这里引用Gityuan博客的一张图. SystermServer进程和Vold进程是通过Socket进行通信的,Vold进程和Kernel是通过Netlink 进行通信的,Netlink 是一种特殊的S

Map/Reduce工作原理

上图是论文里给出的流程图.一切都是从最上方的user program开始的,user program链接了MapReduce库,实现了最基本的Map函数和Reduce函数.图中执行的顺序都用数字标记了. 1.MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split0~4:然后使用fork将用户进程拷贝到集群内其它机器上. 2.user program的副本中有一个称为master,其余称为worker,ma

Java IO工作机制分析

Java的IO类都在java.io包下,这些类大致可分为以下4种: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 Reader 基于磁盘操作的 I/O 接口:File 基于网络操作的 I/O 接口:Socket 1 IO类库的基本结构 1.1 基于字节操作的IO接口 基于字节操作的IO接口分别是InputStream和OutputStream,InputStream的类结构图如下所示: 同InputStream

Nginx源码分析—HTTP框架执行流程

HTTP框架动态执行中的大概流程:先与客户端建立TCP连接,接收HTTP请求行.头部并解析出他们的意义,再根据nginx.conf配置文件找到一些HTTP模块,使其一次合作者处理这个请求. 为了精确地控制超时,还需要把读写事件放置到定时器中. 通过事件模块提东的ngx_handle_read_event方法和ngx_handle_write_event方法,可以把相应的事件添加到epoll中,我们可以起到在满足事件触发条件时,ngxin进程会调用ngx_event_t事件的handler回调方法