一、剖析YARN 运行机制
从YARN运行图来看,客户端在客户端节点向资源管理器发送运行application master 的请求。资源管理器为 application master 提供运行容器。application master可向资源管理器请求分配更多的容器实现分布式运行。application master的运行均在container(容器)中完成。
1. YARN 通过两类长期运行的守护进程提供自己的核心服务,即 resourse manager(管理集群资源使用的资源管理器)和 node manager(运行在集群中所有节点且能够启动和监控容器的节点管理器)。
2. YARN本身并不会为应用的各部分彼此间通信提供任何手段。
二、资源请求
1、YARN有一个灵活的资源请求模型,当请求多个容器时,可以指定每个容器需要的计算机资源数量(内存和CPU),还可以指定对容器的本地限制要求。
2、 YARN允许一个应用为所申请的容器指定本地限制。本地限制可用于申请位于指定节点或机架,或集群中的任何一个容器。
节点申请容器的过程:
三、应用周期
应用到用户运行的作业之间的映射关系:1、一个用户作业对应一个应用。(MapReduce对应的工作方式) 2、作业的每个工作流或每个用户对话对应一个应用。(该模型效率较高,因为容器在作业之间可以重用,并且有可能缓存作业之间的中间数据。spark采取的就是这种模式)。3、多个用户共享一个长期运行的应用。这种应用通常是作为一种协调者的角色在运行。
四、YARN和MapReduce1 比较
|
MapReduce 1 |
YARN |
组成结构 |
Jobtracker、Tasktracker、Slot (Jobtracker通过调度tasktracker上运行的作业来协调所有运行在系统上的作业。Tasktracker在运行任务的同时将运行报告发送给Jobtracker,jobtracker由此记录每项任务的整体运行情况。) |
资源管理器、application master 、时间轴服务器、节点管理器、容器 |
可拓展性 |
当节点数达到4000,任务数达到40000时,MapReduce 1的可拓展性面临瓶颈。其原因是jobtracker必须同时管理作业和任务。 |
YARN利用其资源管理器和application master分离的架构优势克服了这个局限性。 |
可用性 |
当服务守护进程失败时,通过为另一个守护进程复制接管工作所需的状态,以便继续提供服务,从而可获得高可用性。 然而,Jobtracker内存中大量快速变化的复杂状态,使得改进jobtracker服务获得高可用性较为困难。 |
YARN中jobtracker在资源管理器和application master之间进行了职责划分,高可用的服务成为了一个分而治之的问题。 |
利用率 |
MapReduce 1 中,每个tasktracker都配置若干长度的slot。这些slot是静态分配的,在配置的时候就分为map slot 和 reduce slot。一个map slot仅能运行一个map任务。 |
YARN中,一个节点管理一个资源池,而不是制定固定数目的slot。相比于MapReduce 1 ,YARN上运行的mapreduce 不会出现由于集群中只有map slot可用,导致reducce任务必须等待的情况。 |
多租户 |
|
|
五、调度选项对比
|
概念 |
优势 |
劣势 |
备注 |
FIFO调度器 |
应用放置在一个队列中,然后按照提交顺序(先进先出)运行应用。 |
简单易懂,不需要进行任何配置 |
不适合共享集群,大的应用会占用集群全部资源。 |
|
容量调度器 |
一个独立的专门队列保证小作业一提交便可以启动,由于队列容量是为那个队列中的作业所保留的,因此这种方法是以整个集群的利用率为代价。 |
长时间运行并完成作业,允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。 |
与FIFO调度器相比,大作业执行时间长。 |
|
公平调度器 |
不需要预留一定的资源。因为调度器会在运行的作业之间实现动态平衡资源,第一个大作业启动时,它也是唯一运行的作业,因而获得集群中的全部资源,当第二个作业启动时,它被分配到集群的一半资源。 |
集群利用率较高,所有的作业都能够完成。 |
存在时间滞后 |
从第二个作业启动到获得公平共享资源之间会有时间滞后,因为它必须等待第一个使用的容器用完并释放资源,当小作业结束且不再申请资源后,大作业将回去再次使用全部的集群资源。 |
六、延迟调度
所有YARN调度器都试图以本地请求为重。在一个繁忙的集群上,如果一个应用请求某个节点,那么极有可能此时有其他容器正在该节点上运行,显而易见的处理是,立刻放宽本地限制,在同一机架上分配一个容器。然而,通过实践发现,此时如果等待一小段时间,能够戏剧性的增加在所请求的节点分配到 一个容器的机会,从而可以提高集群的效率。这个特性称之为延迟调度。容量调度器和公平调度器都支持延迟调度。
七、主导资源公平性
主导资源公平性:观察每个用户的主导资源,并将其作为对集群使用的一个度量。
例如:某集群100个CPU和10TB的集群。应用A请求的每份容器资源为2个CPU和300GB内存。应用B请求的每份容器资源为6个CPU和100GB内存。对应用A来说,内存占比大于CPU占比,所有应用A的主导资源是内存,则B的主导资源是CPU。应用B申请的资源是A的两倍,所以在公平调度下,B将分到一半的容器数。