YARN通过两类长期运行的守护进程提供自己的核心服务:
resource manager——管理集群上资源使用的资源管理器
node manager——运行在集群中所有节点上,且能够启动和监控容器(container)
YARN上如何运行一个应用:
客户端联系资源管理器(ResourceManager),要求它运行一个Application Master进程(上图步骤1)
ResourceManager找到一个能够在容器(Container)中启动application master的节点管理器(NodeManager)(上图步骤2a、2b)
YARN的三种调度器:FIFO Scheduler, Capacity Scheduler, Fair Scheduler
FIFO:将应用放置在一个队列中,先进先出
FIFO Scheduler简单易懂,不需要任何配置,但不适合共享集群,后加进来的小作业,会一直等待前面的大作业完成,方可开始工作。
在一个共享集群中,更适合使用Capacity Scheduler和Fair Scheduler,
这两种都允许长时间运行的作业能及时完成,同时也允许正在进行的较小的临时查询的用户,能够在合理的时间内得到返回结果。
CDH中配置调度器:yarn-site.xml文件
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
延迟调度
YARN调度器都试图以数据本地化请求为重。在一个繁忙的集群上,如果一个应用请求某个节点,那么极有可能此时有其他容器正在该节点上运行。
显而易见的处理是,立刻放宽本地性需求,在同一机架中分配一个容器。
然而,通过实践发现,此时如果等待一小段时间(不超过几秒),能够戏剧性的增加在所请求的节点上分配到容器的机会,从而可以提高集群的效率。
这个特性即延迟调度(dalay scheduling)
Capacity Scheduler和Fair Scheduler都支持delay scheduler