Yarn调度器和调度算法
YARN调度器
YARN(Yet Another Resource Negotiator)中的调度器是负责资源分配的关键组件,它决定了应用程序在集群中如何获取和使用资源。YARN提供了几种内置的调度器,每种调度器都采用了不同的调度算法,以适应不同的业务需求和资源管理策略。以下是一些主要的YARN调度器及其调度算法的介绍:
FIFO Scheduler(先进先出调度器)
算法特点:这是YARN中最简单的调度器,它按照应用程序提交的顺序来分配资源。第一个提交的应用程序将获得所有可用资源,直到它完成或释放资源,下一个应用程序才会开始运行。
示例:如果一个集群中连续提交了三个应用程序,那么第一个应用程序将使用所有资源,直到它完成,然后第二个应用程序开始运行,以此类推。这种调度方式适用于不需要复杂资源管理和优先级的环境。
Capacity Scheduler(容量调度器)
算法特点:Capacity Scheduler是一种基于层次化的调度器,它允许管理员将集群资源划分给不同的队列,每个队列代表一个组织或部门,可以设置最小和最大资源保证。这种调度方式保证了资源的公平分配,同时也支持优先级较高的队列在资源紧张时获得更多的份额。
示例:假设有一个集群,管理员设置了两个队列,QueueA和QueueB,分别分配了50%的集群资源。当QueueA的作业较少,而QueueB的作业较多时,QueueB可以使用超过50%的资源,直到达到其最大限制。
Fair Scheduler(公平调度器)
算法特点:Fair Scheduler旨在实现所有应用程序之间的公平资源分配。在资源充足时,所有应用程序都会获得相等的资源份额;在资源紧张时,则会根据应用程序的资源需求动态调整分配比例,尽量保证每个应用程序都能获得一定的资源。
示例:在一个有多个同时运行的应用程序的集群中,如果某个应用程序突然增加了资源需求,Fair Scheduler会重新分配资源,确保所有应用程序都能得到公平对待,即使这意味着某些应用程序的资源会被稍微减少。
Preemptive Scheduler(抢占式调度器)
算法特点:虽然YARN本身不直接提供抢占式调度器,但通过配置,Capacity Scheduler和Fair Scheduler可以支持抢占式调度。这意味着高优先级的应用程序可以抢占低优先级应用程序正在使用的资源。
示例:在一个使用抢占式调度的集群中,如果一个高优先级的批处理作业需要紧急运行,它可以抢占正在运行的低优先级在线服务的资源,以确保批处理作业能够尽快完成。
每种调度器都有其适用场景和优缺点,管理员应根据集群的具体需求和业务特性来选择最合适的调度策略。例如,Capacity Scheduler适合于需要保证资源隔离和公平性的多租户环境,而Fair Scheduler则更适合于需要在多个应用程序之间实现动态资源平衡的场景。
总结
每种调度器都有其适用场景和优缺点,管理员应根据集群的具体需求和业务特性来选择最合适的调度策略。例如,Capacity Scheduler适合于需要保证资源隔离和公平性的多租户环境,而Fair Scheduler则更适合于需要在多个应用程序之间实现动态资源平衡的场景。
默认调度器
在Hadoop和CDH中,默认的调度器有所不同:
Hadoop
对于Apache Hadoop,自Hadoop 2.x版本以来,Capacity Scheduler 成为了默认的资源调度器。这个调度器支持多层次的队列管理,允许不同的队列有不同的资源容量保证,这非常适合多租户环境,其中多个用户或团队共享集群资源。
CDH (Cloudera Distribution Including Apache Hadoop)
在Cloudera的Hadoop发行版CDH中,默认的调度器是Fair Scheduler。Fair Scheduler旨在公平地分配集群资源给所有的运行中的应用程序,当资源充足时,每个应用程序都将获得相同的资源份额;当资源紧张时,调度器会根据每个应用程序的资源需求动态调整分配,确保公平性。
然而,需要注意的是,随着Cloudera和其他Hadoop发行商的版本更新,这些默认设置可能会有所变化。例如,Cloudera可能在某些新版本中采用Capacity Scheduler作为默认调度器,或者提供一种机制让用户更灵活地选择调度器。
在具体部署和使用时,管理员可以依据自己的需求通过修改配置文件(如yarn-site.xml
)来改变默认的调度器设置。例如,将默认调度器从Capacity Scheduler更改为Fair Scheduler,或反之亦然,只需设置yarn.resourcemanager.scheduler.class
属性为相应的调度器类名即可。
总结
200台服务器以上,用公平调度器。200台及以下,用容量调度器即可