Yarn作为一个资源和任务调度的平台,在实际应用中往往不止一个应用程序运行在Yarn之上,例如:在Yarn上同时运着MapReduce任务、Spark任务和Flink任务等等。这时候Yarn就需要有一种机制进行调度去分配资源给这些应用程序。
视频讲解如下:
Yarn的资源调度方式主要有以下三种:
一、FIFO Scheduler
如下图所示。在t1的时间点上提交运行了Job1,在t2的时间点提交运行了Job2。但此时Job1并没有执行完成,因此Job2需要等待Job1执行完成后,才能运行。这样的资源调度方式存在的问题就是没有考虑任务的优先级。后提交的任务优先级别可能更高,但是无法得到资源运行,一直处于Pending的状态。
二、Capacity Scheduler
如下图所示,这种资源调度的方式是容器管理的调度方式,适合多租户安全地共享Yarn集群的资源。它采用的队列的方式,可以为不同的队列分配不同的资源比例。任务可以提交到不同的队列,而在同一个队列内部又采用FIFO Scheduler。同时Capacity Scheduler支持用户限制、访问控制、层级队列等等配置。
三、Fair Scheduler
如下图所示,Fair Scheduler是公平调度策略,能够根据任务的权重公平地分享Yarn集群中的资源。这种调度策略会为所有运行的任务动态分配资源。例如:在t1的时间点,提交了Job1。由于此时整个集群只有这一个任务在运行,它将占有集群的所有资源。在t2的时间点上,提交了Job2。此时,Yarn集群上就有两个任务在运行,它们将各占用系统一半的资源。如果有第三个Job3也提交了上来,这时候每个任务将占有系统三分一的资源。使用Fair Scheduler也可以根据不同任务的权重动态分配资源,权重越大分配的资源也就越多。