1.yarn运行机制?
下面对上面出现的一些名词进行介绍:
ResourceManager:是YARN资源控制框架的中心模块,负责集群中所有的资源的统一管理和分配。它接收来自NM(NodeManager)的汇报, 建立AM,并将资源派送给AM(ApplicationMaster)。
NodeManager:简称NM,NodeManager是ResourceManager在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager提供这些资源使用报告。
ApplicationMaster:以下简称AM。YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container做什么事情。
Container:资源容器。YARN中所有的应用都是在container之上运行的。AM也是在container上运行的,不过AM的container是RM申请的。
(1) Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。
(2) Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
(3)Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以是任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
另外,一个应用程序所需的Container分为两大类,如下:
(1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2)运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。
以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即ApplicationMaster可能与它管理的任务运行在一个节点上。
整个MapReduce的过程大致分为 Map–>Shuffle(排序)–>Combine(组合)–>Reduce
2.yarn上运行一个应用步骤:
1、客户端联系资源管理器(RM),要求运行一个application master(AM)进程(上图步骤1)。
2、资源管理其找到一个能够在容器启动application master(AM)的节点管理器(NM)(上图步骤2a、2b)。
3、application master(AM)运行后,根据应用本身向资源管理器(RM)请求更多容器(上图步骤3)。
4、资源管理器(RM)给application master(AM)分配需要的资源后,application master(AM)在对应资源节点管理器(NM)启动容器,节点管理器(NM)获取任务运行需要的resources后,在该容器运行任务。(上图4a、4b)。
3.调度策略
理想情况下yarn应用发出资源请求会立刻给予满足,但现实是资源是有限的,通常需要等待才能得到所需资源,因此yarn提供多种调度器和可配置策略来供选择。
4.3.1 调度策略
yarn提供FIFO调度器、容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)三种调度器可用。
1. FIFO调度器
FIFO调度器将应用放置在一个队列中,按照提价顺序运行应用,首先为队列中第一个应用请求分配资源,第一个应用请求被满足后再依次为队列下一个应用服务。
FIFO调度器简单易懂,不需要配置,但不适合共享集群。如果碰到大应用(运行资源多)占用集群所有资源,其他应用必须等待直到轮到自己运行。这种情况下容量调度器或公平调度器更适合,这两种调度器允许长时间作业及时完成,又允许较小临时查询用户能得到反馈。
2. 容量调度器(Capacity Scheduler)
如上图所属,当使用FIFO调度器(i)时,小作业会一直被阻塞,直到大作业完成。使用容量调度器时一个独立的专门队列保证小作业一提交就启动,由于队列容量为固定队列中作业所保留的,这种策略是以整个集群利用率为代价,相比于FIFO调度器相比,大作业执行时间更长。
3. 公平调度器
使用公平调度器时,不需要预留一定资源,调度器会在所有运行的作业之间动态平衡资源,第一个作业启动时,因为是唯一运行作业因而可以获得集群所有资源。当第二个作业启动,它被分配到集群的一半资源,每个作业都能公平共享资源。在这个过程中第二个作业启动能获得公平共享资源之间会有时间滞后,必须等待第一个作业使用的容器能用完并释放出资源。当小作业结束且不再申请资源后,大作业将再次使用全部资源,最终实现即得到较高集群利用率,又保证小作业及时完成。
4.3.2 容量调度器配置
- 弹性队列
队列中有多个作业,队列资源不够用事,如果仍有可用的空闲资源,容量调度器可能将空余资源分配给队列中的队列,哪怕会超出队列容量。 - 容量调度器不会强行中止而抢占容器。
缓解队列中开始资源够用,后来不够用需等待其他队列释放容器资源的方法:为队列设置一个最大容量限制,队列就不会过多侵占其他队列的容量了。
4.3.3 公平调度器配置
- 支持抢占功能
抢占
抢占是在公平调度器模式下,当作业被提交到一个空队列时,因为没有作业运行需要的资源,作业不会立刻启动,这时允许调度器终止那些占用资源超过其公平共享份额的队列容器,这些容器释放后分配给资源数量低于应得份额队列。要启动这项功能需要配置下面策略参数。 - 延迟调度
延迟调度是尝试以本地请求为重,如果一个应用请求某个节点等待一段时间后能够增加在所请求节点上分配容器的机会,增加调度本地性,提高集群效率。
当使用延迟调度时,调度器不会简单使用它收到第一调度机会,而是等待设定的最大数目调度机会发生,才放松本地限制并接受下一个调度机会。
4.3.5 主导资源公平性
观察每个用户的主导资源,将其作为对集群资源使用的一个度量
第四章 关于YARN
YARN(Yet Another Resource Negotiator)是Hadoop集群的资源管理系统。提供请求和使用集群资源的API,但这些API很少直接用户用户代码。
4.1 剖析YARN应用运行机制
- resource manager:管理集群上资源使用的资源管理器;
运行在集群中所有节点上并且能够启动和监控容器(container)的节点管理器(node manager)。
容器用于执行特定应用程序的进程,每个容器都有资源限制(内存、CPU等)。
yarn的运行机制和步骤见👆。 - yarn本身不会为应用的各部分(客户端、master进程)彼此间通信提供任何手段。大多数重要的yarn应用使用某种形式的远程通信机制(如hadoop的RPC层)来向客户端传递状态更新和返回结果。
4.1.1 资源请求**
- 有一个灵活的资源请求模型:当请求多个容器时,可以指定每个容器需要的计算机资源数量(内存和CPU),还可以指定对容器的本地限制要求。
- 本地化对于确保分布式数据处理算法高效使用集群宽带非常重要。
- YARN允许一个应用为所申请的容器指定本地限制。本地限制客用于申请位于指定节点或机架、或集群中任何位置(机架外)的容器。
- 有时本地限制无法被满足,则要么不分配资源,要么放松限制。
- YARN应用可以在运行中的任意时刻提出资源申请。
4.1.2 应用生命周期
第一种模型:一个用户作业对应一个应用,如MapReduce。
第二种模型:作业的每个工作流或每个用户对话(可能并无关联性)对应一个应用。
效率比第一种高,容器可以在作业之间重用,有可能缓存作业之间的中间数据,如Spark。
第三种模型:多个用户共享一个长期运行的应用,通常作为一种协调者的角色。
4.2 YARN与MapReduce1对比
1.MapReduce1介绍
MapReduce1:一个jobtracker及一个或多个tasktracker。
jobtracker:调度tasktracker上运行的任务来协调所有运行在系统上的作业。
tasktracker:在运行任务的同时将运行报告发给jobtracker,jobtracker记录每项作业任务的整体进度情况。
一个任务失败,jobtracker可以在其他tasktracker节点上重新调度该任务。
jobtracker同时负责作业调度(将任务和TT匹配)和任务进度监控(跟踪任务、重启失败或延缓的任务;记录任务流水,如维护计数器的计数),负责存储已完成作业的作业历史。
2.YARN优势
- 可扩展性
可以在更大规模的集群上运行。利用资源管理器和AM分离的架构优点克服MapReduce1中JT必须同时管理作业和任务的瓶颈,两者分别到4000、40000时,可扩展性遇到瓶颈,可扩展到10000、100000。 - 可用性
高可用性(HA):当服务守护进程失败时,通过为另一个守护进程复制接管工作所需状态以便继续提供服务。
先为资源管理器提供高可用性,再为YARN应用(针对每个应用)提供高可用性。 - 利用率
MapReduce1,每个TT都配置若干长度的slot,slots是静态分配的,配置的时候被分为map slot、reduce slot。一个map slot仅能用于一个map任务,一个reduce slot仅能作用于一个reduce任务。
YARN中,一个节点管理器管理一个资源池,按需请求资源。 - 多租户
向mapreduce外的其他类型分布式开发hadoop,用户可以在同一个YARN集群上运行不同版本的mapreduce。
4.3 YARN中的调度