Hadoop YARN(Yet Another Resource Negotiator)是Apache Hadoop分布式计算框架中的一部分,它是一个资源管理系统,通过对计算集群中的资源进行管理和分配,使得不同的应用程序可以共享计算资源。Hadoop YARN提供了多种调度器,其中最常用的是FairScheduler(公平调度器)。
FairScheduler是一种公平的资源调度器,它使用基于抢占的方式来保证各个作业之间的资源公平性。FairScheduler会将所有的资源划分为不同的资源池,并为不同的作业分配不同的资源池,每个资源池有一定的资源量限制,同时每个资源池又被划分为多个资源容器,而每个容器又用来执行一个或多个任务,从而完成整个作业流程的执行。
FairScheduler的资源调度机制基于三种调度算法:
-
队列调度算法:FairScheduler会将不同的作业划分为不同的队列,每个队列都有一定的资源上限。当一个作业提交后,它会被调度到某一个队列中,并获得该队列的一部分资源。
-
比例调度算法:比例调度算法可以调整队列之间的资源比例。比例调度算法根据每个队列预留的最小百分比来分配资源。例如,队列A预留了60%的资源,队列B预留了40%的资源,比例调度算法会根据这两个比例来分配资源。
-
抢占调度算法:抢占调度算法可以防止单个作业占用太多的资源。如果某个队列中的作业占用了过多的资源,FairScheduler会暂停该作业,并将资源重新分配给其他队列。
FairScheduler适用于在计算资源有限的场景下,合理分配和利用计算资源。它可以为不同的作业分配不同的资源池,从而让它们共享同一批计算资源。另外,在多租户场景下,可以使用FairScheduler为不同的租户分配不同的资源池,并且保证不同租户之间的资源公平性。FairScheduler已经广泛应用于Hadoop生态系统中的各种计算组件,例如Hadoop MapReduce、Hive、Pig等,它不仅具有很好的稳定性和可靠性,而且还可以按需调整资源分配策略,以满足多种应用场景的需求。