Yarn_基础

来源:互联网 发布:腾牛网软件下载 编辑:程序博客网 时间:2024/05/16 09:49
  1. 轻量级弹性计算平台

    基于数据密集型应用的计算框架不断出现,从支持离线处理的MapReduce,到支持在线处理的 Storm,从迭代式计算框架Spark 到流式处理框架S4。在搜索引擎公司中,一种可能的技术方 案如下:网页建立索引采用MapReduce 框架,自然语言处理/ 数据挖掘采用Spark(如网页 PageRank 计算、聚类分类算法等),对性能要求很高的数据挖掘算法用MPI 等。考虑到资源利用率、运维成本、数据共享等因素,公司一般希望将所有这些框架都部署到一个公共的集群中, 让它们共享集群的资源,并对资源进行统一使用,同时采用某种资源隔离方案(如轻量级 cgroups)对各个任务进行隔离,这样便诞生了轻量级弹性计算平台,YARN 便是弹性计算平台的典型代表。

    YARN 的目标已经不再局限于支持MapReduce 一种计算框架,而是朝着对多种框架进行统一管理的方向发展。相比于“一种计算框架一个集群”的模式,共享集群的模式存在多种好处:
    ❑资源利用率高。如果每个框架一个集群,则往往由于应用程序数量和资源需求的不均衡性,使得在某段时间内,有些计算框架的集群资源紧张,而另外一些集群资源空闲。共享集群模式 则通过多种框架共享资源,使得集群中的资源得到更加充分的利用。
    ❑运维成本低。如果采用“一个框架一个集群”的模式,则可能需要多个管理员管理这些集群,进而增加运维成本,而共享模式通常需要少数管理员即可完成多个框架的统一管理。
    ❑ 数据共享。随着数据量的暴增,跨集群间的数据移动不仅需花费更长的时间,且硬件成本也会大大增加,而共享集群模式可让多种框架共享数据和硬件资源,将大大减小数据移动带来的成本。

    这里写图片描述
    针对Hadoop 1.0 中的MapReduce在扩展性和多框架支持等方面的不足,2.x将JobTracker 中的资源管理和作业控制功能分开, 分别由组件ResourceManager 和ApplicationMaster 实现, 其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster 仅负责管理一个应用程序,进而诞生了全新的通用资源管理框架YARN。基于YARN,用户可以运行各种类型的应用程序从离线计算的MapReduce 到在线计算(流式处理)的Storm 等。

  2. MapReduce编程模型

    将问题抽象成Map 和Reduce 两个阶段,其中Map 阶段将输入数据解析成key/value,迭代调用map() 函数处理后,再以key/value 的形式输出到本地目录,而Reduce 阶段则将key 相同的value 进行规约处理,并将最终结果写到HDFS 上;它的数据处理引擎由MapTask 和ReduceTask 组成,分别负责Map 阶段逻辑和Reduce 阶段逻辑的处理。MRv2是在MRv1 基础上经加工之后,运行于资源管理框架YARN 之上的计算框架MapReduce。它的运行时环境变为通用资源管理系统YARN 和作业控制进程ApplicationMaster,其中,YARN 负责资源管理和调度,而ApplicationMaster 仅负责一个作业的管理。YARN 不仅限于MapReduce 一种框架使用,也可以供其他框架使用,比如Tez、Spark、Storm等。

  3. Yarn基本架构

    YARN 的基本设计思想是将MRv1 中的JobTracker拆分成两个独立的服务:一个全局的资源管理器ResourceManager 和每个应用程序特有的ApplicationMaster。其中ResourceManager 负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。
    YARN 总体上仍然是Master/Slave 结构,在整个资源管理框架中,ResourceManager 为Master,NodeManager 为Slave,ResourceManager 负责对各个NodeManager 上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager 申请资源,并要求NodeManger 启动可以占用一定资源的任务。由于不同的ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响。
    YARN 主要由ResourceManager、NodeManager、ApplicationMaster和Container 等几个组件构成。

    这里写图片描述

  4. ResourceManager(RM)

    RM 是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。

    (1)调度器
    调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。需要注意的是,该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster 完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(Resource Container,简称Container)表示,Container 是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN 提供了多种直接可用的调度器,比如FairScheduler 和Capacity Scheduler 等。

    (2)应用程序管理器
    应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster 运行状态并在失败时重新启动它等。

  5. NodeManager(NM)

    NM 是每个节点上的资源和任务管理器,一方面,它会定时地向RM 汇报本节点上的资源使用情况和各个Container 的运行状态;另一方面,它接收并处理来自AM 的Container启动/ 停止等各种请求。

  6. Container

    Container 是YARN 中的资源抽象,它封装了某个节点上的多维度资源, 如内存、CPU、磁盘、网络等,当AM 向RM 申请资源时,RM 为AM 返回的资源便是用Container表示的。YARN 会为每个任务分配一个Container,且该任务只能使用该Container 中描述的资源。需要注意的是,Container 不同于MRv1 中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。截至本书完成时,YARN 仅支持CPU 和内存两种资源,且使用了轻量级资源隔离机制Cgroups 进行资源隔离。

  7. Yarn的通信协议

    RPC 协议是连接各个组件的“大动脉”,在YARN 中,任何两个需相互通信的组件之间仅有一个RPC 协议,而对于任何一个RPC 协议,通信双方有一端是Client,另一端为Server,且Client 总是主动连接Server 的,因此,YARN 实际上采用的是拉式(pull-based)通信模型。

    为了提高Hadoop 的向后兼容性和不同版本之间的兼容性,YARN 中的序列化框架采用了Google 开源的Protocol Buffers。Protocol Buffers 的引入使得YARN 具有协议向后兼容性。

    这里写图片描述

  8. Yarn工作流程

    运行在YARN 上的应用程序分为两类:短应用程序和长应用程序。短应用程序是指一定时间内可运行完成并正常退出的应用程序,比如MapReduce 作业、Tez DAG 作业等。长应用程序是指不出意外,永不终止运行的应用程序,通常是一些服务,比如Storm Service(主要包括Nimbus 和Supervisor 两类服务),HBase Service(包括Hmaster 和RegionServer 两类服务) 等,而它们本身作为一个框架提供了编程接口供用户使用。尽管这两类应用程序作用不同,一类直接运行数据处理程序,一类用于部署服务(服务之上再运行数据处理程序),但运行在YARN 上的流程是相同的。

    当用户向YARN 中提交一个应用程序后,YARN 将分两个阶段运行该应用程序:第一个阶段是启动ApplicationMaster ;第二个阶段是由ApplicationMaster 创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。YARN 的工作流程分为以下几个步骤:
    步骤1 用户向YARN 提交应用程序,其中包括ApplicationMaster 程序、启动ApplicationMaster的命令、用户程序等。
    步骤2 ResourceManager 为该应用程序分配第一个Container,并与对应的Node-Manager 通信,要求它在这个Container 中启动应用程序的ApplicationMaster。
    步骤3 ApplicationMaster 首先向ResourceManager 注册,这样用户可通过ResourceManager 查看应用程序的运行状态,然后为各个任务申请资源,并监控运行状态,直到运行结束
    步骤4 ApplicationMaster 采用轮询方式通过RPC 协议向ResourceManager 申请和领取资源。
    步骤5 一旦ApplicationMaster 申请到资源,便与对应的NodeManager 通信,要求它启动任务。
    步骤6 NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
    步骤7 各任务通过某个RPC 协议向ApplicationMaster 汇报状态和进度,让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过 程中,用户可随时通过RPC 向ApplicationMaster 查询应用程序的当前运行状态。
    步骤8 应用程序运行完成后,ApplicationMaster 向ResourceManager 注销并关闭自己。

  9. 多角度理解Yarn
    ① 并行编程
    多线程编程大体流程:先由操作系统启动一个主线程,由它负责数据切分、任务分配、子线程启动和销毁等工作,而各子线程只负责计算自己的数据,所有子线程处理完数据后,主线程退出。类比理解,将YARN 看做一个云操作系统,它负责为应用程序启动ApplicationMaster (相当于主线程),然后再由ApplicationMaster 负责数据切分、任务分配、启动和监控等工作,而由ApplicationMaster 启动的各个Task(相当于子线程)仅负责自己的计算任务。当所有任务计算完成后,ApplicationMaster 认为应用程序运行完成,然后退出。

    ② 资源管理系统
    资源管理系统的主要功能是对集群中各类资源进行抽象,并根据各种应用程序或者服务的要求,按照一定的调度策略,将资源分配给它们使用,同时需采用一定的资源隔离机制防止应用程序或者服务之间因资源抢占而相互干扰。YARN 正是一个资源管理系统,它的出现弱化了计算框架之争,引入YARN 这一层后,各种计算框架可各自发挥自己的优势,并由YARN 进行统一管理,进而运行在一个大集群上。

    ③ 云计算
    云计算包括以下几个层次的服务:IaaS、PaaS 和SaaS。
    IaaS(Infrastructure-as-a-Service) :基础设施即服务。消费者通过Internet 从完善的计算机基础设施获得服务。Iaas 通过网络向用户提供计算机(物理机和虚拟机)、存储空间、网络连接、负载均衡和防火墙等基本计算资源;用户在此基础上部署和运行各种软件,包括操作系统和应用程序等。
    PaaS(Platform-as-a-Service) :平台即服务。PaaS 是将软件研发的平台作为一种服务,以SaaS 的模式提交给用户。平台通常包括操作系统、编程语言的运行环境、数据库和 Web服务器等,用户可以在平台上部署和运行自己的应用。通常而言,用户不能管理和控制底层的基础设施,只能控制自己部署的应用。
    SaaS(Software-as-a-Service) :软件即服务。它是一种通过Internet 提供软件的模式,用户无需购买软件,而是向提供商租用基于Web 的软件,来管理企业经营活动。云提供商在云端安装和运行应用软件,云用户通过云客户端(比如Web 浏览器)使用软件。
    从云计算分层概念上讲,YARN 可看做PAAS 层,它能够为不同类型的应用程序提供统一的管理和调度。

原创粉丝点击