关于Scheduler
YARN有四种调度机制:Fair Schedule,Capacity Schedule,FIFO以及Priority;
其中Fair Scheduler是资源池机制,进入到里面的应用是共享pool里面的资源;只有当资源配比发生紧张的时候,才会根据权重来进行调整;
Capacity则是基于队列的,每个队列都会被分配资源比例,这种资源比例是固定;所以没有资源共享的概念
MapR,cloudera都是默认采用Fair Scheduler,Ambari(Hortonwork)默认使用Capacity Scheduler;
Fair Scheduler是一个池子的概念,就是来了一个应用就扔到这个池子里面,大家共享这个池子里面的资源;Fair Scheduler提供了一种Weigth的概念,就是比重,最后鬼根据比重来为各个池子分配资源(本质和Capacity里面的capacity一样);同时她还提供了max resource,min resource的可选配置,就是制定资源下限和上限;这个属性的配置是可以覆盖weigth(权重)的。但是并不推荐使用max min资源配置,因为不够灵活;
Capacity Scheduler是一个队列概念,来了一个应用,如果发现资源不够了,则根据FIFO规则排队;什么时候资源够了,再用。
Fair Scheduler可以配置自动创建pool,但是Capacity则无法创建队列;其实本质差别就是在于一个是pool共享资源的概念(YARN-3319),一个是queue队列形式利用资源。或者这么解释,对于Faire而言,可以使用资源池中未被使用的资源,但是Capacity则不允许;所以前者比较灵活,后者相对古板。但是通过看到Capacity有计划也实现一版fairness appliction;如果真是这样,那么两者区别就变得很小了。