Hadoop之核心Yarn的优点以及不足

Hadoop之核心Yarn的优点以及不足

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

YARN的优点

  • 将资源管理和作业控制分离,减小JobTracker压力

  • YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

  • 老的框架中,JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在,这个部分就扔给ApplicationMaster做了而ResourceManager中有一个模块叫做ApplicationsManager(ASM),它负责监测ApplicationMaster的运行状况。

  • 能够支持不同的计算框架

将计算框架和底层存储调度分开,以支持更多的计算框架。在YARN中ApplicationMaster是一个可变更的部分,用户可以对不同的计算框架写自己的 AppMst,让更多类型的计算框架能够跑在Hadoop集群中,可以参考YARN官方配置模板中的mapred-site.xml配置。

  • 资源管理更加合理

  • 使用Container对资源进行抽象,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,比之前以slot数目更合理。

  • 且使用了轻量级资源隔离机制Cgroups进行资源隔离。

  • Container的设计避免了之前的map slot/reduce slot分开造成集群资源闲置的尴尬情况。

YARN的不足

YARN是一个双层调度器(Two-level scheduler),解决了中央调度器(Monolithic scheduler)的不足(中央调度器典型的代表就是JobTracker),双层调度架构看上去为调度增加了灵活性和并发性,但实际上它保守的资源可见性和上锁算法(使用悲观并发)也限制了灵活性和并发性。第一,保守的资源可见性导致各框架无法感知整个集群的资源使用情况,有空闲资源无法通知排队的进程,容易造成资源的浪费;第二,上锁算法降低了并发性,调度器会将资源分配给一个架构,只有该架构返回资源后,调度器才回将该部分资源分配给其他架构,在第一个分配过程中,资源相当于被锁住,从而降低了并发性。总结来说,YARN同其他双层架构的调度器(例如:Mesos)都有的不足为:

  • 各个应用无法感知集群整体资源的使用情况,只能等待上层调度推送信息。

  • 资源分配采用轮询、ResourceOffer机制(mesos),在分配过程中使用悲观锁,并发粒度小。

  • 缺乏一种有效的竞争或优先抢占的机制。

为了改善双层调度系统的的不足,尤其是各个应用无法感知集群整体资源的使用情况和悲观加锁控制导致的并发性不高这两个不足,共享状态调度器(Shared State Scheduler)被越来越多的人所重视,其中最具代表性的就是Google的Omega。共享状态调度器在双层调度器的基础上做了改进:

  • 简化了双层调度器中的全局资源管理器,改为由一个Cell State来记录集群内的资源使用情况,这些使用情况都是共享的数据,以此来达到与全局资源管理器相同的效果。

  • 所有任务访问共享数据时,采用乐观并发控制方法。

共享调度器也存在不足。例如,当某一资源被不同任务同时访问时容易产生冲突,访问的任务越多时,冲突次数就会越多,冲突次数越高调度器的性能下降越快,这将影响调度器的工作效率和工作性能。


分享到:


相關文章: