Hadoop学习(四):资源调度管理系统YARN

YARN 简介

YARN是Hadoop2.0引进的,前身是MapReduce本身的资源调度框架,Hadoop2.0后将MapReduce计算框架和YARN资源调度框架做了分离。

YARN 核心组件

在这里插入图片描述

  • Resources Manager
    是YARN主从架构下的master,是整个集群资源的调度者和管理者。Client提交作业后,首先是向RM提交资源申请。RM负责给用户提交的所有应用程序分配资源,它根据应用程序优先级、队列容量、ACLs、数据位置等信息,做出决策,然后以共享的、安全的、多租户的方式制定分配策略,调度集群资源。
  • Node Manager
    YARN主从架构下的worker或slave,整个集群资源的节点管理者。主要负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康。具体如下:
    1. 启动时向 ResourceManager 注册并定时发送心跳消息,等待 ResourceManager 的指令;
    2. 维护 Container 的生命周期,监控 Container 的资源使用情况;
    3. 管理任务运行时的相关依赖,根据 ApplicationMaster 的需要,在启动 Container 之前将需要的程序及其依赖拷贝到本地。
  • APPlication Master
    在用户提交一个应用程序时,YARN 会启动一个轻量级的进程 ApplicationMaster。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器内资源的使用情况,同时还负责任务的监控与容错。具体如下:
    1. 根据应用的运行状态来决定动态计算资源需求;
    2. 向 ResourceManager 申请资源,监控申请的资源的使用情况;
    3. 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息;
    4. 负责任务的容错。
  • Container
    Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。当 AM 向 RM 申请资源时,RM 为 AM 返回的资源是用 Container 表示的。YARN 会为每个任务分配一个 Container,该任务只能使用该 Container 中描述的资源。ApplicationMaster 可在 Container 内运行任何类型的任务。例如,MapReduce ApplicationMaster 请求一个容器来启动 map 或 reduce 任务,而 Giraph ApplicationMaster 请求一个容器来运行 Giraph 任务。

YARN工作原理简述

  1. Client 提交作业到 YARN 上;

  2. Resource Manager 选择一个 Node Manager,启动一个 Container 并运行 Application Master 实例;

  3. Application Master 根据实际需要向 Resource Manager 请求更多的 Container 资源(如果作业很小, 应用管理器会选择在其自己的 JVM 中运行任务);

  4. Application Master 通过获取到的 Container 资源执行分布式计算。

流程

  1. MR向yarn提交任务
  2. yarn开启空闲nodeManager的App mstr
  3. App mstr计算任务所需的资源并反馈给RM
  4. RM向空闲的NM开启Container分配资源
  5. NodeManager开始MR任务
  6. 反馈成果给app mstr并进一步反馈给RM
  7. RM释放资源

在这里插入图片描述
YARN高可用利用了Zookeeper,具体看另外一篇文章的思路。
Hadoop学习(三):Zookeeper实现Hadoop集群高可用
在这里插入图片描述

资源调度器

对于一个集群来说,资源总是不够用的,合理的资源调度是一个集群保证高效运转的前提。YARN内部有三种可供选择的资源调度器,分别为:

  • FIFO Scheduler
  • Capacity Scheduler
  • Fair Scheduler
  1. FIFO Scheduler
    和名称一样,就是根据任务的提交时间来调度,在一个繁忙的集群中,FIFO Scheduler效果显然不够好。例如,大任务先于小任务提交,大任务显然要比小任务耗时时间长,所以采用这种方式调度时会造成小任务迟迟得不到结果。
    对于繁忙的集群,应该选择Capacity Scheduler或Fair Scheduler。
  2. Capacity Scheduler
    容量调度器允许多个组织共享Hadoop集群,每个组织可以分配到全部集群资源的一部分。可以配置多个队列,队列内部还允许配置队列,在队列内部采用的FIFO调度。
    如果队列中有多个任务使用的资源超过了该队列的容量,当集群资源还有剩余的时候,这些任务是可以分配到队列外的资源的;如果队列设置了最大容量限制,那么就无法使用了。
    YARN默认使用容量调度器(一些开源项目默认使用公平调度器)
  3. Fair Scheduler
    公平调度器尽可能达到任务之间的公平。当有一个作业进来时,调度器先为他分配队列中所有资源;当第二个任务过来时,该任务在一段时间后将获得一半资源,另外一半由另外一个任务所使用(等一段时间是因为task要先完成后释放containers)。公平调度器还可以抢占那些占用超过了公平共享份额的任务,但是会降低整个集群的效率。
    资源调度器的更多介绍请看Hadoop权威指南第四版P85。
发布了352 篇原创文章 · 获赞 73 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43777983/article/details/105056882