MR作业提交流程分析

2019-03-27  本文已影响0人  liuzx32

Hadoop 2.x引入了一种新的执行机制。这种新机制(MR 2)建立在一个名为YARN的系统上。而用于执行的框架通过 “mapreduce.framework.name” 属性进行设置。

mapreduce.framework.name取值:

local: 表示本地的作业运行器
classical: 表示经典的MR框架(也称MR 1,它使用一个 jobtracker 和多个 tasktracker)
yarn: 表示新的框架

角色介绍

  1. 资源管理器: 即 Resource Manager(RM),负责管理所有应用程序计算资源的分配。
  2. 应用管理器: 即 Application Master(AM),每一个应用程序的AM负责相应的调度和协调。
  3. 容器: 即 Containers, YARN为将来的资源隔离而提出的框架,每一个任务对应一个Container,且只能在该Container中运行。
  4. 节点监视器: 即 Node Manager(NM),管理每个节点上的资源和任务,主要有两个作用:定期向AM汇报该节点的资源使用情况和各个Container的运行状态;接收并处理AM的任务启动、停止等请求。
  1. MR运行机制

1.1 YARN上的MR角色实体

Client: 提交MapReduce作业
ResourceManger: 协调集群上的计算资源分配
NodeManager: 启动和监视集群中机器上的计算容器(Container)
ApplicationMaster: 负责协调运行MR作业的任务。它和MR任务在NM的Container中运行,这些容器由ResourceManager分配并由NodeManager进行管理
HDFS: 保存作业的数据、配置信息等

1.2 作业的运行过程

image.png

1)提交作业

2)作业初始化

3)任务分配

ApplicationMaster 为该作业中的所有 map 任务和 reduce 任务向 RM 请求 Container (步骤8);【随着心跳信息的请求包括每个map任务的数据本地化信息,特别是输入分片所在的主机和相应机架信息。理想情况下,它将任务分配到数据本地化的节点,但如果不可能这么做,就会相对于本地化的分配优先使用机架本地化的分配】

请求也为任务指定了内存需求。在默认情况下, map任务和reduce任务都分配到 1024MB 的内存,但这可以通过 mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb来设置。

4)任务执行

一旦 RM 的 Scheduler 为任务分配了 Container, ApplicationMaster就通过与 NM通信来启动 Container(步骤9a & 9b);
该任务由主类为 YardChild 的Java应用程序执行。在它运行任务之前,首先将任务需要的资源本地化(包括作业的配置、JAR文件和所有来自分布式缓存的文件)(步骤10);
最后,运行 map 任务或 reduce 任务(步骤11)。

5)进度和状态的更新

在YARN下运行,任务每 3s通过 umbilical 接口向 ApplicationMaster 汇报进度和状态(包括计数器),作为作业的汇聚试图(aggregate view)。

6)作业完成

除了向 ApplicationMaster 查询进度外,Client 每 5s还通过调用 Job 的 waitForCompletion() 来检查作业是否完成【查询的间隔可以通过 mapreduce.client.completion.pollinterval 属性进行设置】。
作业完成后, ApplicationMaster 和任务容器清理其工作状态, OutputCommitter 的作业清理方法会被调用。作业历史服务器保存作业的信息供用户需要时查询。

1.3 图说MR

image.png

Summary

1 MR任务执行流程:提交作业 ——> 初始化作业 ——> 任务分配 ——> 任务执行 ——> 进度和状态更新 ——> 作业完成

2 MR任务运行:(a) 推测执行, (b) 任务JVM重用

Reference Link

  1. MR任务运行的两种情况: https://www.cnblogs.com/DianaCody/p/5425660.html
  2. MapReduce程序的工作过程: https://www.cnblogs.com/cxzdy/p/5104013.html
上一篇 下一篇

猜你喜欢

热点阅读