Yarn容量调度器和公平调度器的异同
理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。为此,Yarn提供了多种调度器和可配置的策略供我们选择。
Capacity Scheduler(容量调度器)
对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。用这个资源调度器,就可以配置yarn资源队列,这个后面后介绍用到。
Fair Scheduler(公平调度器)
Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。当然,公平调度在也可以在多个队列间工作。
举个例子,假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
a) 公平调度器,就是能够共享整个集群的资源
b) 不用预先占用资源,每一个作业都是共享的
c) 每当提交一个作业的时候,就会占用整个资源。如果再提交一个作业,那么第一个作业就会分给第二个作业一部分资源,第一个作业也就释放一部分资源。再提交其他的作业时,也同理。。。。也就是说每一个作业进来,都有机会获取资源。
Yarn调度器和调度算法
目前,Hadoop作业调度器主要有三种: FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。
Apache Hadoop-1.x默认调度器是FIFO;
Apache hadoop-2.7.2之后默认调度器是容量调度器Capacity Scheduler
Apache hadoop-3.2.2默认调度器是公平调度器Fair Scheduler。
CDH 框架默认调度器是 Fair Scheduler。
一、容量调度器(Capacity Scheduler)
1. 容量调度器特点
- 多队列 :每个队列可配置一定的资源量,每个队列内部采用FIFO调度策略;
- 容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
- 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
- 多租户:
a. 支持多用户共享集群和多应用程序同时运行;
b. 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。
2. 容量调度器资源分配算法
二、公平调度器(Fair Scheduler)
1. 公平调度器特点
与容量调度器相同点:
多队列 :每个队列可配置一定的资源量。
容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
多租户:
- 支持多用户共享集群和多应用程序同时运行;
- 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。
与容量调度器不同点:
核心调度策略不同
容量调度器: 优先选择资源利用率低的队列;
公平调度器:优先选择对资源缺额比例大的。
每个队列可以单独设置资源分配方式
容量调度器:FIFO、DRF(内存+CPU);
公平调度器:FIFO、FAIR、DRF。
队列任务平行度不同
公平调度器:多队列,同一时间队列中多任务按照缺额执行,队列并行度大于队列个数
容量调度器:多队列,同一时间队列中只有一个任务执行,队列中按照先进先出分配任务,队列并行度等于队列个数。
Fair策略
Fair策略是公平调度器默认的队列分配方式