HADOOP YARN原理及资源调度

文章目录

  • 1、ResourceManager
  • 2、NodeManager
  • 3、Applicacation Master
  • 4、yarn调度方式
  • 5、Yarn架构及各角色职责
  • 6、Yarn作业执行流程
  • 7、特点
  • 8、MapReduce在Yarn上的运转

1、ResourceManager

ReaouceManager(资源管理器RM)常驻守护进程:
管理集群资源,负责全局资源的监控、分配和管理;
接收来自Nodemanager的心跳信息,进行整体资源的汇总;
监控Application Master的开启和创建

2、NodeManager

yarn中的每一台节点服务器都运行一个Node manager,
Node manager相当于管理当前机器的一个代理;
负责本台机器的程序运行,并且对本台机器资源进行管理和监控;
Node Manager定时向ResourceManager 汇报本节点的资源(cpu、内存)使用情况;
启动并监控Container;

3、Applicacation Master

用户提交一个应用将会产生对应的Applicacation Master(AM),
AM常驻在Node manager上;
每一个AM都需要于Node manager进行资源协商,将获取所需的资源(container)用于任务(Task)的运行监控任务(Task)的运行情况;
如果Task运行失败,他将负责为其重新申请资源和启动任务;

4、yarn调度方式

	1 、先进先出调度
	2、容量调度
	3、公平调度

5、Yarn架构及各角色职责

HADOOP YARN原理及资源调度_第1张图片
这张图足够咱们喝一壶的,来吧,展示!

6、Yarn作业执行流程

1、client向ResourceManager发出任务请求。
2、Resource Manager指定一个NodeManager启动其ApplicationMaster。
3、ApplicationMaster将计算任务反馈给Resource Manager。4、ApplicationMaster将任务分割分发到不同的NodeManager。
5、NodeManager启动Task执行work。

7、特点

1、yarn 具有双层调度策略,Resource Manager将资源分配给Application Master,Application Master再将资源分配给NodeManager。而且,yarn具有预留的调度策略。资源不够时,会为Task预留资源,直到积累充足

2、yarn具有较好的容错机制。当任务失败,ResourceManager将失败任务告诉Application Master。由ApplicationMaster处理失败的任务。ApplicationMaster会保存已经执行的Task,重启不会重新执行

3、yarn支持多种类型资源调度,其基于DRF算法实现。而且,其支持多种资源调度器FIFO、FairScheduler以及Cpacity Scheduler。最后,yarn支持多租户资源调度器包括支持资源按比例分配、层级队列划分方式以及支持资源抢占

4、yarn支持内存和CPU二种资源隔离。内存是一种”决定生死“的资源。CPU隔离包括默认不对CPU资源进行隔离和基于Cgroups的方案

5、 yarn支持的调度语义包括请求某个特定节点/机架上的特定资源量、将某些节点加入(或移除)黑名单,不再为自己分配这些节点上的资 源以及请求归还某些资源。不支持的语义包括请求任意节点/机架上的特定资源量、请求一组或几组符合某种特质的资源、超细粒度资源以及动态调整Container资源 。

6、yarn是通用的统一资源管理系统,同时运行长应用程序和短应用程序 。长应用程序通常情况下,指永不停止运行的程序 ervice、HTTP Server等。短应用程序指短时间(秒级、分钟级、小时级)内会运行结束的程序 MR job、Spark Job等 。如下图所示,yarn使得集群中各种任务的执行成为可能。
HADOOP YARN原理及资源调度_第2张图片
Hadoop及YARN架构
HADOOP YARN原理及资源调度_第3张图片

8、MapReduce在Yarn上的运转

HADOOP YARN原理及资源调度_第4张图片
1、用户向YARN中提交应用程序,其中包括AM程序、启动AM的命令、命令参数、用户程序等;事实上,需要准确描述运行ApplicationMaster的unix进程的所有信息。提交工作通常由YarnClient来完成。
2、RM为该应用程序分配第一个Container,并与对应的NM通信,要求它在这个Container中启动AM;
3、AM首先向RM注册,这样用户可以直接通过RM査看应用程序的运行状态,运行状态通过 AMRMClientAsync.CallbackHandler的getProgress() 方法来传递给RM。 然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4〜7;
4、AM采用轮询的方式通过RPC协议向RM申请和领取资源;资源的协调通过 AMRMClientAsync异步完成,相应的处理方法封装在AMRMClientAsync.CallbackHandler中。
5、—旦AM申请到资源后,便与对应的NM通信,要求它启动任务;通常需要指定一个ContainerLaunchContext,提供Container启动时需要的信息。
6、NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
7、各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;ApplicationMaster与NM的通信通过NMClientAsync object来完成,容器的所有事件通过NMClientAsync.CallbackHandler来处理。例如启动、状态更新、停止等。
8、应用程序运行完成后,AM向RM注销并关闭自己。

你可能感兴趣的:(hadoop)