hadoop分布式资源调度框架yarn
1.yarn 的概念
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。可以把yarn 理解为相当于一个分布式的操作系统平台,而mapreduce 等运算程序则相当于运行于操作系统之上的应用程序,Yarn 为这些程序提供运算所需的资源(内存、cpu)。
2. yarn 的架构
YARN 是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM).
1).ResourceManager 负责所有资源的监控、分配和管理;
2).ApplicationMaster 负责每一个具体应用程序的调度和协调;
3).NodeManager 负责每一个节点的维护。对于所有的applications,RM 拥有绝对的控制权和对资源的分配权。而每个AM 则会和RM协商资源,同时和NodeManager 通信来执行和监控task。
3. yarn 的工作流程
1 ) client 向RM 提交应用程序, 其中包括启动该应用的ApplicationMaster 的必须信息,例如ApplicationMaster 程序、启动
ApplicationMaster 的命令、用户程序等。
2 ) ResourceManager 启动一个container 用于运行ApplicationMaster 。启动中的ApplicationMaster 向ResourceManager 注册自己,启动成功后与RM 保持心跳。
3)ApplicationMaster 向ResourceManager 发送请求,申请相应数目的container。
4) ResourceManager 返回ApplicationMaster 的申请的containers信息。申请成功的container,由ApplicationMaster 进行初始化。container 的启动信息初始化后,AM与对应的NodeManager 通信,要求NM 启动container。AM 与NM 保持心跳,从而对NM 上运行的任务进行监控和管理。
5)container 运行期间,ApplicationMaster 对container 进行监控。container 通过RPC协议向对应的AM 汇报自己的进度和状态等信息。
6) 应用运行期间,client 直接与AM 通信获取应用的状态、进度更新等信息。
7) 应用运行结束后,ApplicationMaster 向ResourceManager 注销自己,并允许属于它的container 被收回。
详细流程见下图:
4. yarn 的调度器Scheduler
Yarn 中,负责给应用分配资源的就是Scheduler,有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,FairScheduler。
1) FIFO Scheduler
FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
2)Capacity Scheduler
Capacity 调度器允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。
3.Fair Scheduler
在Fair 调度器中,我们不需要预先占用一定的系统资源,Fair 调度器会为所有运行的job 动态的调整系统资源。如下图所示,当第一个大job 提交时,只有这一个job 在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair 调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。