在Hadoop中提交一个任务大致分为6个步骤,分别为:

作业提交 -> 作业初始化 –> 任务分配 –> 任务执行 –> 更新任务执行进度和状态 -> 作业完成

目录

作业提交

作业初始化

任务的分配

任务执行

更新任务执行进度和状态

作业完成


客户端(Client):编写MapReduce程序,配置作业,提交作业

JobTracker:协调作业的运行,分配作业,初始化作业,与TaskTracker进行通信

TaskTracker:负责运行作业,保持与JobTracker的通信,

HDFS:保持作业的数据与结构

作业提交

JobClient使用runJob方法新建一个JobClient 实例,然后调用submitJob()方法进行作业的提交,提交作业的具体过程如下:

  1. 通过调用JobTracker对象的getNewJobId()方法从JobTracker处获得一个作业ID。
  2. 检查作业的相关路径。如果输出路径存在,作业将不会被提交(保护上一个作业运行结果)。
  3. 计算作业的输入分片,如果无法计算,例如输入路径不存在,作业将不被提交,错误返回给 MapReduce 程序。
  4. 将运行作业所需资源(作业 Jar 文件、配置文件和计算所得到的分片)复制到HDFS 上。JAR文件默认会有10个副本(mapred.submit.replication属性控制);输入划分信息告诉了JobTracker应该为这个作业启动多少个map任务等信息。
  5. 告知 JobTracker 作业准备执行(使用 JobTracker 对象的 submitJob()方法来真正提交作业)。

作业初始化

当 JobTracker 收到 Job 提交的请求后,将 job 保存在一个内部队列,并让 Job Scheduler(作业调度器)处理并初始化。

初始化涉及到创建一个封装了其 tasks 的 job 对象,并保持对 task 的状态和进度的根据(step 5)。当创建要运行的一系列 task 对象后,Job Scheduler 首先开始从文件系统中获取由 JobClient 计算的 input splits(step 6),然后再为每个 split 创建 map task。

任务的分配

TaskTracker 和 JobTracker 之间的通信和任务的分配是通过心跳机制完成的。TaskTracker 作为一个单独的 JVM,它执行一个简单的循环,主要实现每隔一段时间向 JobTracker 发送心跳,告诉 JobTracker 此 TaskTracker 是否存活,是否准备执行新的任务。如果有待分配的任务,他就会为 TaskTracker 分配一个任务。

初始化完毕后,作业调度器会获取输入分片信息(input split),每个分片创建一个map任务。

接下来就是任务分配了,这个时候tasktracker会运行一个简单的循环机制定期发送心跳给jobtracker,心跳间隔是5秒,程序员可以配置这个时间,心跳就是jobtracker和tasktracker沟通的桥梁,通过心跳,jobtracker可以监控tasktracker是否存活,也可以获取tasktracker处理的状态和问题,同时tasktracker也可以通过心跳里的返回值获取jobtracker给它的操作指令。

任务分配好后就是执行任务了。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候(注意:这个是异步操作),客户端会查到job完成的通知的。如果job中途失败,mapreduce也会有相应机制处理,一般而言如果不是程序员程序本身有bug,mapreduce错误处理机制都能保证提交的job能正常完成。

JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度(这里是不是很像微机中的进程调度呢),当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行。

对于map和reduce任务,TaskTracker根据主机核的数量和内存的大小有固定数量的map槽和reduce槽。这里需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化(Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到该TaskTracker上来运行,这叫“运算移动,数据不移动”。而分配reduce任务时并不考虑数据本地化

任务执行

TaskTracker 申请到新的任务之后,就要在本地运行了。首先,是将任务本地化(包括运行任务所需的数据、配置信息、代码等),即从 HDFS 复制到本地。调用localizeJob()完成的。对于使用 Streaming和 Pipes 创建 Map 或者 Reduce 程序的任务,Java 会把 key/value 传递给外部进程,然后通过用户自定义的 Map 或者Reduce 进行处理,然后把 key/value 传回到 Java 中。其实就好像是 TaskTracker 的子进程在处理 Map 和 Reduce 代码一样。

更新任务执行进度和状态

进度和状态是通过 heartbeat(心跳机制)来更新和维护的。来对于 Map Task,进度就是已处理数据占所有需要数据的百分比。对于 Reduce Task,情况就有点复杂,包括3 部分,拷贝中间结果文件(负责阶段)、排序阶段、Reduce 调用,每部分占 1/3。

TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。

作业完成

当 Job 完成后,JobTracker 会收一个 Job Complete 的通知,并将当前的 Job 状态更新为 Successful,同时 JobClient也会轮循获知提交的 Job已经完成,将信息显示给用户。最后,JobTracker 会清理和回收该 Job 的相关资源,并通知 TaskTracker 进行相同的操作(比如删除中间结果文件)。

Hadoop中任务提交运行流程相关推荐

  1. TTCN中PTC的运行流程

    一些概念 Component(测试组件或者测试成分),TTCN接触下来最频繁的就是MTC(Main Test Component,主测试组件),在执行测试用例前,需要首先创建一个MTC,在testca ...

  2. Hadoop中HDFS的读写流程详解

    一.HDFS写流程示意图: (1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,检查客户端是否有权限 ...

  3. FreeRTOS 中 RISC-V-Qemu-virt_GCC 的 运行流程 的异常分析

    在 RISC-V-Reader-Chinese-v2p1.pdf 中RISC-V 中实现精确例外:保证异常之前的所有指令都完整地执行了,而后续的指令都没有开始执行(或等同于没有执行) 所有 RISC- ...

  4. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  5. Submarine:在 Apache Hadoop 中运行深度学习框架

    \u003cp\u003e作者: \u003ca href=\"https://hortonworks.com/blog/author/wtan/\"\u003eWangda Ta ...

  6. SSM框架中MVC各层的作用以及运行流程

    这篇博文主要介绍的是SSM(Spring.SpringMVC.Mybatis)框架中,MVC各层的作用以及各层之间的交互和框架整体运行流程. 一.MVC各层级间的作用及关系 表现层(springMVC ...

  7. android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...

    本发明涉及一种基于符号的识别android应用运行在模拟器中的方法. 背景技术: 很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模 ...

  8. springboot中缓存技术的使用、原理及其运行流程

    Springboot中缓存的工作原理 要想在springboot中使用缓存,首先要了解springboot中缓存的工作原理. 我们知道springboot在启动时会有很多的自动配置类(xxx-Auto ...

  9. spark提交到yarn_详细总结spark基于standalone、yarn集群提交作业流程

    最近总结了一些关于spark core的内容,今天先来和大家分享一下spark的运行模式. spark运行模式 (1)local:在本地eclipse.IDEA中写spark代码运行程序,一般用于测试 ...

最新文章

  1. 华裔教授教你写论文2.引言的逻辑解析
  2. 约瑟夫问题(丢手帕问题)的java实现
  3. git传代码到github
  4. Java-ServiceLoader类
  5. linux 安装phpMyAdmin
  6. 2021-11-21 使用for循环打印出大写字母ascll码对照表。
  7. SI4438可变长包数据收发
  8. Mac 下修改eclipse内存设置
  9. 计算机ipv6无法连接,ipv6无网络访问权限实测解决教程
  10. SPSS提示“列表中不允许存在字符串变量”的解决方法
  11. (四)万能的搜索 —— 2. 解救小哈
  12. [LOJ]#6515. 「雅礼集训 2018 Day10」贪玩蓝月
  13. vue移动端用什么数据可视化插件_前端必看的数据可视化入门指南
  14. Ubuntu下.py文件的运行
  15. 简单字符驱动笔记(朱有鹏)
  16. Visual GDB不能在线调试,出现Received a SIGTRAP:Trace/breakpoint trap
  17. 美国俚语:down-to-earth踏实谦逊
  18. ERP 系统,编译和学习
  19. android 备份qcn文件,关于efs文件的qcn备份
  20. 短路与和逻辑与的区别

热门文章

  1. DHCP 中继实验
  2. 详解代理自动配置 PAC
  3. Asp.net在线压缩和解压缩简单实现(附项目源码)
  4. android KK版本号收到短信后,点亮屏的操作
  5. 动态asp网页批量生成静态html网页问题
  6. IDEA创建方法时快速添加注释
  7. 干货|为什么Kafka不支持读写分离
  8. 从头搭建 IntelliJ IDEA 环境,从放弃到爱不释手!
  9. redux-saga 实践总结
  10. 【阿里云 Linux 服务器】购买 Linux 到项目部署过程中遇到的问题,部署 SpringBoot 项目到服务器上,在手机上安装 Android 程序进行测试