zoukankan      html  css  js  c++  java
  • 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一、经典MapReduce的作业运行机制

    如下图是经典MapReduce作业的工作原理:

    1.1 经典MapReduce作业的实体

    经典MapReduce作业运行过程包含的实体:

    •  客户端,提交MapReduce作业。
    • JobTracker,协调作业的运行。JobTracker是一个Java应用程序,它的主类是JobTracker。
    •  TaskTracker,运行作业划分后的任务。TaskTracker是Java应用程序,它的主类是TaskTracker。
    • 分布式文件系统(一般为HDFS),用来在其他实体间共享作业文件。

    1.2 经典MapReduce作业的运行过程

    1. 作业提交

    • 客户端运行MapReduce作业(步骤1)
    • 向JobTracker请求一个新的作业ID,通过调用JobTracker的getNewJobId()方法获取(步骤2)
    • 将运行作业所需的资源(包括作业JAR文件、配置文件和计算所得的输入分片)复制到一个以ID命名的JobTracker的文件系统中(步骤3)
    • 告知JobTracker作业准备执行,通过调用JobTracker的submitJob()方法实现(步骤4)

    2. 作业初始化

    • JobTracker收到对其submitJob()方法的调用后,会把此调用放入一个内部队列中,交由作业调度器进行调度,并对其进行初始化(步骤5)。初始化包括创建一个表示正在运行作业的对象,用于封装任务和记录信息,以便跟踪任务的状态和进程。
    • 作业调度器从共享文件系统中获取客户端已经计算好的输入分片(步骤6)。为每个分片创建一个map任务,创建的reduce任务由Job的mapred.reduce.tasks属性决定,以及新建作业创建和作业清理的任务。

    3. 任务分配

    • TaskTracker定期向JobTracker发生“心跳(heartbeat)”,表名TaskTracker是否存活,同时保持两者之间的通信(步骤7)
    • JobTracker为TaskTracker分配任务,对于map任务,jobtracker会考虑tasktracker的网络位置,选取一个距离其输入分片文件最近的tasktracker,对于reduce任务,jobtracker会从reduce任务列表中选取下一个来执行。

    4. 任务执行

    • 从HDFS中把作业的JAR文件复制到TaskTracker所在的文件系统,实现JAR文件本地化,同时,TaskTracker将应用程序所需的全部文件从分布式缓存复制到本地磁盘(步骤8),并且为任务新建一个本地工作目录,把JAR文件中的内容解压到这个文件夹下,然后新建一个TaskRunner实例运行该任务。

    5. 进度和状态更新

    • 任务在运行时,对其进度(progress,即任务完成百分比)的保持跟踪。

    6. 作业完成

    • 将作业的状态设置为“成功”,并且清空JobTracker作业的工作状态,也指示TaskTracker清空作业的工作状态(如删除中间输出)。

    二、Yarn上MapReduce作业运行机制

    如图为Yarn中MapReduce作业的工作原理:

    2.1 Yarn上的MapReduce作业的实体

    主要包括以下几个实体:

    • 提交MapReduce作业的客户端
    • ResourceManager,Yarn资源管理器,负责协调集群上计算资源的分配
    • NodeManager,Yarn节点管理器,负责启动和监视集群中机器上的计算容器(container)
    • MRAPPMaster,MapReduce应用程序MRAppMaster负责协调运行MapReduce作业的任务。它和MapReduce任务在容器中运行,这些容器由资源管理器分配并由节点管理器进行管理
    • 分布式文件系统,一般为HDFS,用来与其他实体间共享作业文件

    2.2 Yarn中MapReduce作业的运行过程

    1. 作业提交

    • 客户端运行MapReduce作业(步骤1)
    • 客户端向ResourceManager请求新的作业ID,ResourceManager收到请求后,返回一个ApplicationID(步骤2)
    • 客户端检查作业的的输出说明,计算输入分片,并将作业运行所需的资源(包括作业jar文件、配置文件和分片信息)复制到HDFS(步骤3)
    • 告知ResourceManager作业准备执行,并调用ResourceManager上的submitApplication( )方法提交作业(步骤4)

    2. 作业初始化

    • 资源管理器收到应用提交请求后,便将请求传递给调度器Scheduler,调度器分配一个容器,然后ResourceManager在NodeManager的管理下在容器中启动应用程序的master进程(步骤5(a)和5(b))
    • 对作业进行初始化,创建对象以保持对作业进度的跟踪(步骤6)
    • MRAppMaster接受来自共享文件系统HDFS的在客户端计算的输入分片(步骤7)

     3. 任务分配

    • MRAppMaster为作业中的所有map任务和reduce任务向ResourceManager请求容器(步骤8)

    4. 任务执行

    • 一旦ResourceManager的调度器为任务分配了容器,MRAppMaster就通过与NodeManager通信来启动容器(步骤9(a)和9(b))
    • 任务在运行之前,需要将任务所需的资源本地化,包括作业的配置、JAR文件和所有来自分布式缓存的文件(步骤10)
    • 运行map任务或reduce任务(步骤11)

    5. 进度和状态更新

    • 任务每三秒钟通过umbilical接口向ApplicationMaster汇报自己的进度和状态(包含计数器),方便ApplicationMaster随时掌握各个任务的运行状态。

    6. 作业完成

    • 作业完成后,ApplicationMaster和任务容器清理其工作状态,ApplicationMaster向ResourceManager注销并关闭自己。

    【参考链接】

    [1] Asu_PC, MR1和MR2的工作原理.

    [2] Tom Wbite, 《Hadoop权威指南》

  • 相关阅读:
    Vim作者创造新编程语言Zimbu
    Google Maps API编程资源大全
    好网收集的地址
    三种模拟自动登录和提交POST信息的实现方法
    解析VMware三种网络连接方式
    PostgreSQL 创建帐号,数据库,权限
    LINUX目录详解
    Linux流媒体服务器安装配置
    用RAMDISK来提高PostgreSQL访问速度
    PostgreSQL 集群复制方案之使用pgq和londiste工具包
  • 原文地址:https://www.cnblogs.com/lemonu/p/9751398.html
Copyright © 2011-2022 走看看