Loading

Yarn

date: 2018-11-16 18:59:29
updated: 2018-11-16 18:59:29

  1. Yarn的简介
    Yarn是Hadoop集群的资源管理系统,Hadoop2.0对MapReduce框架做了彻底的设计重构。
    Hadoop1.x对MapReduce job的调度管理方式主要包括两部分功能:** ResourceManagement 资源管理** 和 JobScheduling/JobMonitoring 任务调度监控
    到了Hadoop2.x也就是Yarn,它的目标是将这两部分功能分开,也就是分别用两个进程来管理这两个任务,将此拆分成了ResourceManagerApplicationMaster
    需要注意的是,在Yarn中我们把job的概念换成了application,因为在新的Hadoop2.x中,运行的应用不只是MapReduce了,还有可能是其它应用如一个DAG(有向无环图Directed Acyclic Graph,例如storm应用)。

  2. Yarn的组件及架构
    Yarn主要由以下几个组件组成:
    1. ResourceManager:Global(全局)的进程
    2. NodeManager:运行在每个节点上的进程
    3. ApplicationMaster:Application-specific(应用级别)的进程
    - Scheduler:是ResourceManager的一个组件
    - Container:节点上一组CPU和内存资源

    Container是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,所有的应用都会运行在Container中。
    ApplicationMaster是对运行在Yarn中某个应用的抽象,它其实就是某个类型应用的实例,ApplicationMaster是应用级别的,它的主要功能就是向ResourceManager(全局的)申请计算资源(Containers)并且和NodeManager交互来执行和监控具体的task。
    Scheduler是ResourceManager专门进行资源管理的一个组件,负责分配NodeManager上的Container资源,NodeManager也会不断发送自己Container使用情况给ResourceManager。

    ResourceManager和NodeManager两个进程主要负责系统管理方面的任务。
    ResourceManager有一个Scheduler,负责各个集群中应用的资源分配。对于每种类型的每个应用,都会对应一个ApplicationMaster实例,ApplicationMaster通过和ResourceManager沟通获得Container资源来运行具体的job,并跟踪这个job的运行状态、监控运行进度。

  3. Yarn 框架相对于老的 MapReduce 框架什么优势呢?

     这个设计大大减小了 ResourceManager 的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
     在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 ``mapred-site.xml`` 配置。
     对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。
     老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsManager,它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
     Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 ,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。
    
posted @ 2020-10-20 16:35  猫熊小才天  阅读(83)  评论(0编辑  收藏  举报