Yarn(一)Yarn初识+架构+工作机制*+作业提交全过程

Posted on 2020-05-08 08:20  MissRong  阅读(818)  评论(0)    收藏  举报

Yarn

一、Hadoop1.x和Hadoop2.x架构区别

在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。

在Hadoop2.x时代,增加了Yarn。Yarn只负责资源的调度,MapReduce只负责运算。

二、Yarn概述

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

三、Yarn基本架构

YARN主要由ResourceManager、NodeManager、ApplicationMaster 和Container等组件构成。

四、Yarn工作机制

 

1.名词解释:

1)资源:

在 YARN 的语境下,资源特指计算资源,包括 CPU 和内存。计算机的每个进程都会占用一定的 CPU 和内存,任务需要先向 RM 申请到资源后才能获准在 NM 上启动自己的进程。

2)队列:

YARN 将整个集群的资源划分为队列,每个用户的任务必须提交到指定队列。同时限制每个队列的大小,防止某个用户的任务占用整个集群,影响了其他用户的使用。

3)Vcore(核数) & Mem(内存):

逻辑 CPU 和逻辑内存-可用资源,每个 NM 会向 RM 汇报自己有多少 vcore 和内存可用,具体数值由集群管理员配置。

比如一台48核,128G内存的机器,可以配置40vcore,120G内存,意为可以对外提供这么多资源。具体数值可能根据实际情况有所调整。每个 NM 的逻辑资源加起来,就是整个集群的总资源量。

4)MinResources & MaxResources:

为了使每个队列都能得到一定的资源,同时又不浪费集群的空闲资源,队列的资源设置都是“弹性”的。

每个队列都有 min 和 max 两个资源值,min 表示只要需求能达到,集群一定会提供这么多资源;如果资源需求超过了 min 值而同时集群仍有空闲资源,则仍然可以满足;但又限制了资源不能无限申请以免影响其他任务,资源的分配不会超过 max 值。

5)Container:

任务申请到资源后在 NM 上启动的进程统称 Container。比如在 MapReduce 中可以是 Mapper 或 Reducer,在 Spark 中可以是 Driver 或 Executor。

2.工作机制简化版

 

 

ResourceManager 是集群资源仲裁者,用于管理集群中的用户作业。

NodeManager 是作业的实施者,用于管理节点上的用户作业和工作流程。

ApplicationMaster 是集群作业的监督者,用于作业的生命周期管理。

1) 用户使用客户端向 RM 提交一个任务job,同时指定提交到哪个队列和需要多少资源。用户可以通过每个计算引擎的对应参数设置,如果没有特别指定,则使用默认设置。

2)RM 在收到任务提交的请求后,先根据资源和队列是否满足要求选择一个 NM,通知它启动一个特殊的 container,称为 ApplicationMaster(AM-就是图中的MRAppmaster),后续流程由它发起。

3)AM 向 RM 注册后根据自己任务的需要,向 RM 申请 container,包括数量、所需资源量、所在位置等因素。

4)如果队列有足够资源,RM 会将 container 分配给有足够剩余资源的 NM,由 AM 通知 NM 启动 container。

5)container 启动后执行具体的任务,处理分给自己的数据。NM 除了负责启动 container,还负责监控它的资源使用状况以及是否失败退出等工作,如果 container 实际使用的内存超过申请时指定的内存,会将其杀死,保证其他 container 能正常运行。

6)各个 container 向 AM 汇报自己的进度,都完成后,AM 向 RM 注销任务并退出,RM 通知 NM 杀死对应的 container,任务结束。

container设置多少资源合适?

如果 container 内存设置得过低,而实际使用的内存较多,则可能会被 YARN 在运行过程中杀死,无法正常运行。而如果 container 内部线程并发数较多而 vcore 设置的较少,则可能会被分配到一个 load 已经比较高的机器上,导致运行缓慢。所以需要预估单个 container 处理的数据量对应的内存,同时 vcore 数设置的不应该比并发线程数低。

3.Yarn复杂运行机制

 

工作机制详解

(0)Mr程序提交到客户端所在的节点。

(1)Yarnrunner向Resourcemanager申请一个Application

(2)rm将该应用程序的资源路径返回给yarnrunner。

(3)该程序将运行所需资源提交到HDFS上。

(4)程序资源提交完毕后,申请运行mrAppMaster

(5)RM将用户的请求初始化成一个task

(6)其中一个NodeManager领取到task任务。

(7)该NodeManager创建容器Container并产生MRAppmaster

(8)Container从HDFS上拷贝资源到本地。

(9)MRAppmaster向RM 申请运行maptask资源

(10)RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

(11)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。

(12)MrAppMaster等待所有maptask运行完毕后,向RM申请容器,运行reduce task

(13)reduce task向maptask获取相应分区的数据。

(14)程序运行完毕后,MR会向RM申请注销自己

五、作业提交全过程

作业提交全过程详解

1)作业提交

0步:client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。

1步:clientRM申请一个作业id

2步:RMclient返回该job资源的提交路径和作业id

3步:client提交jar包、切片信息和配置文件到指定的资源提交路径

4步:client提交完资源后,向RM申请运行MrAppMaster

2)作业初始化

5步:当RM收到client的请求后,将该job添加到容量调度器中。

6步:某一个空闲的NM领取到该job

7步:NM创建Container并产生MRAppmaster

8步:下载client提交的资源到本地。

3)任务分配

9步:MrAppMasterRM申请运行多个maptask任务资源。

10步:RM将运行maptask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

4)任务运行

11步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动maptask,maptask对数据分区排序。

12步:MrAppMaster等待所有maptask运行完毕后,向RM申请容器,运行reduce task

13步:reduce task向maptask获取相应分区的数据。

14步:程序运行完毕后,MR会向RM申请注销自己。

5)进度和状态更新

YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

6)作业完成

除了向应用管理器-AM请求作业进度外, 客户端每5分钟都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3