Hadoop资源管理器-YARN

Hadoop1.0

在这里插入图片描述

  1. 创建job,获取jobID。
  2. 检查作业的输出说明并计算作业的输入分片,然后将运行作业所需要的资源都复制

到以作业ID命名的目录下。

  1. 提交作业,告知jobtracker作业准备执行。(submitJob()方法)
  2. 初始化作业。创建一个表示正在运行作业的对象,用来封装任务和记录信息。
  3. 获取客户端计算好的输入分片,然后为每 个分片创建一个map任务。在此步骤的时候 还会创建reduce任务、作业创建任务、作业 清理任务。
  4. taskTraker发送心跳给JobTraker。
  5. 从共享文件系统把作业的JAR文件复制到tasktracker所在的文件系统。
  6. tasktracker创建一个TaskRunner实例。
  7. 启动一个新的JVM来运行map/reduce任务。

缺点

  1. **扩展性差:**在 MRv1 中,JobTracker 同时兼备 了资源管理和作业控制两个功能,这成为系统的 一个最大瓶颈,严重制约了 Hadoop 集群扩展性。
  2. 可靠性差:MRv1采用了master/slave结构,其中 master存在单点故障问题,一旦它出现故障将导 致整个集群不可用。
  3. 资源利用率低:MRv1采用了基于槽位的资源分配 模型,槽位是一种粗粒度的资源划分单位,通常 一个任务不会用完槽位对应的资源,其他任务也 无法使用这些空闲资源。此外,Hadoop将槽位分 为Map Slot和Reduce Slot两种,且不允许它们 之间共享, 常常会导致一种槽位资源紧张而另 外一种闲置(比如一个作业刚刚提交时,只会运 行Map Task,此时Reduce Slot闲置)。
  4. 无法支持多种计算框架:随着互联网高速发展, MapReduce这种基于磁盘的离线计算框架已经不 能满足应用要求,从而出现了一些新的计算框架 包括内存计算框架、流式计算框架和迭代式计算 框架等,而MRv1不能支持多种计算框架并存。

因此,有了Hadoop2.0,在HDFS之上添加资源管理器YARN

在这里插入图片描述

Yarn基本架构

在这里插入图片描述

ResourceManager(RM)

全局的资源管理器,负责整 个系统资源的管理和分配。由调度器(Scheduler) 和应用程序管理器(Applications Manager ASM)组 成。调度器是纯调度器,只负责资源分配。资源分 配单位抽象为Container。ASM用于应用提交,启动 ApplicationMaster、监控AM运行状态并在失败时重 启它。

NodeManager(NM)

NM是每个节点上的资源和任务 管理器,一方面定时向RM汇报本节点的资源使用 情况和各个Container的运行状态,另一方面,接受 来自AM的Container启停请求。

ApplictionMaster(AM)

每个应用程序对应一个AM。 主要负责向RM请求资源、与NM通信来启停任务、 监控所有任务的运行状态,并在任务运行失败时重 新为任务申请资源并重启。

Container

是YARN的资源抽象,封装了某节点的多维度资源,例如内存、CPU、网络、磁盘等(目前只支持CPU和内存)。

Yarn的工作流程

在这里插入图片描述

  1. 用户向YARN提交应用程序,其中包括 ApplicationMaster程序,启动AM的命令,用户程序。
  2. RM为该应用程序分配第一个Container,并与对应的NM通信,要求它在这个Container中启动应用程序对应的AM。
  3. AM启动后向RM注册,用户可以直接通过RM查看应 用程序的运行状态。重复4~7。
  4. AM采用轮询的方式通过RPC协议向RM申请和领取资源。
  5. 一旦AM申请到资源后,与对应的NM通信,要求它 启动任务。
  6. NM为任务设置好运行环境(包括环境变量、JAR包、 二进制程序等)后,将任务启动命令写入一个脚本中, 通过该脚本启动任务。
  7. 各个任务通过RPC协议向AM汇报自己的状态和进度, 以让AM随时掌握任务的运行状态,从而可以在任务失 败时重启任务。
  8. 任务运行完成后,AM向RM注销并关闭自己。

Yarn的容错

ResourceManager的单点故障

ResourceManager有备份节点,当主节点出现故障,将切换到从节点继续工作。

NodeManager

  1. 失败之后,ResourceManager将失败任务告诉对应的ApplicationMaster
  2. ApplicationMaster 决定如何去处理失败任务。

ApplicationMaster

  1. 失败后,由ResourceManager负责重启。
  2. ApplicationMaster需要处理内部任务的容错问题。
  3. ResourceManager会保存已经运行的task,重启后无需重新运行。

YARN的调度器-资源调度模型

双层资源调度模型

YARN采用了双层资源调度模型:

  1. 在第一层中,ResourceManager中的资源调度器将资源分配给各个 ApplicationMaster;
  2. 在第二层中,ApplicationMaster再进一步将资源分配给它内部的各个任务。

这里资源调度器主要关注的是第一层的调度问题,至于第二层的调度策略,完全由用户应用程序自己决定。

YARN采用的是pull-base通信模型,而不是push-base通信模型。资源调度器将资源分配给一个应用程 序后,它不会立刻push给对应的ApplicationMaster,而是暂时放到一个缓冲区中,等待ApplicationMaster 通过周期性的心跳主动来取。

YARN的调度器-资源保证机制

增量资源分配

​ 当应用程序申请的资源暂时无法保证时,是优先为应用程序预留一个节点上的资源直到累计释放的空闲资 源满足应用程序的需求。这种资源分配方式,预留资源会造成资源的浪费,降低集群资源利用率。

一次性资源分配

​ 当应用程序申请的资源暂时无法保证时,会放弃当前资源,直到出现一个节点剩余资源一次性满足应用程序需求。这种资源分配方式会出现饿死现象。即应用程序可能永远也等不到满足资源需求的节点出现。

YARN采用增量资源分配机制,尽管这种机制会造成浪费,但不会造成饿死现象。(假设应用程序不会永久占用某个资源,它会在一定时间内释放占用的资源)。

YARN的调度器-资源抢占模型

在资源调度器中,每个队列可设置一个最小资源量和最大资源量,其中,最小资源量是资源紧缺情况 下每个队列需保证的资源量,而最大资源量则是极端情况下队列也不能超过的资源使用量。

资源抢占:最小资源并不是硬资源保证,当一个队列资源负载较轻时,会将空闲资源分配给需要的队列,当负载较轻队列需要资源时,往往资源还在使用,在等待一段时间后将资源进行抢占。

YARN的调度器-Capacity Shedule

容量保证

每个队列可以设定最低资源保证和最高资源使用上限,而提交到该队列的任务则共享该队列的资源。

灵活性

如果一个队列资源有剩余,而其他队列资源紧张,可以先借用资源给其他队列。而一旦该队列有应用程序 提交,则其他队列释放资源后会归还给该队列。

多种租赁

支持多用户共享集群和多应用程序同时运行。管理员可以为之增加多种约束(某队列最大运行的任务数 等)。

安全保证

每个队列都有严格的ACL列表规定它的访问用户,每个用户可以指定哪些用户可以查看自己应用程序的状 态或者控制应用程序(例如杀死应用程序)。管理员可以指定队列管理员和系统管理员。

动态配置更新

管理员可以根据需要动态修改配置参数。

子对列

  1. 队列可以嵌套,每个队列可以有子队列。
  2. 用户只能讲应用程序提交到最底层队列,即叶子队列。

最少最大容量

  1. 每个队列配置最小和最大容量。
  2. 调度器总会选择当前资源使用率最低的队列,并为之分配资源。例如同级的队列A1,A2。它们最小容量均为30。而A1使用了12,A2使用了10,则调度器会优先将资源分给A2。
  3. 最小容量不是“总会保证最低容量”。
  4. 最小容量>=0,且不能大于最大容量。
  5. 最大容量限制了队列使用容量的极限值。

叶子节点内部使用多种策略

  • FIFO,user limit ,application limit ,etc.
发布了38 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42297075/article/details/104399669
今日推荐