《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)

《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记 (1)

第二章:YARN的设计理念和基本架构

由于 mrv1 在扩展性,可靠性,资源利用和多框架等方面存在明显的不足,诞生了新的MapReduce,由于mrv2将资源管理模块构建成了一个独立的通用系统YARN。

2.1 YARN产生背景

  • mrv1的局限性:

    • 扩展性差
    • 可靠性差 master/slave结构,master单点故障问题,一旦故障则整个集群不可用,
    • 资源利用率低:通常一个任务无法用完所有资源,其他任务无法使用空闲资源。
    • 无法支持多种计算框架
  • YARN :

    • 资源利用率高: 多种框架共享资源
      《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)
    • 运维成本低:一个框架一个集群 -》需要多个管理 -----》 现在可以同一管理
    • 数据共享 :多种框架共享数据,大大减少数据转移的成本
版本对比

mrv1 :
《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)
JobTracker 由两部分组成:1 资源管理 2作业控制

mr v2 + yarn: 将 jobTracker的两个功能分开,
《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)
两个版本的对比:《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)

YARN 基本架构

将mrv1中的jobTracker 分成两个独立的服务:

  • 一个全局的资源管理系统ResourceManager RS
  • 每个应用程序特有的ApplicationMaster AM
    RS负责整个系统的资源管理的分配,而AM负责单个应用程序(map,或reduce任务)的管理
    YARN的基本架构见下图
    《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)
ResourceManager ( RM)

RM 由两个组件构成:调度器(Scheduler) 和应用程序管理器(Applications Manager ASM)

  • 调度器
    根据每个应用程序的需求进行分配资源(分配为容器 Resource Container, 简称 Container)
    Container 是一个动态资源分配单位,包含 cpu,内存,磁盘,网格等资源分装到一起。
    调度器是一个可插拔的组件,用户可以根据自己需要设计新的调度器
  • ASM
    负责整个系统中所有的应用程序,包括应用程序提交,与调度器协商资源以启动ApplicationMaster,监控ApplicationMaster 运行状态并在失败时重新启动它等
ApplicationMaster (AM)

用户提交的每个应用都包含一个AM
其功能是:

  • 与RM调度器协商以获取资源(Container)
  • 将得到的任务进一步分配给内部的任务
  • 与NM 通信以启动、关闭任务
  • 监控所有任务运行状态,并在任务失败时重新为任务申请资源以重启任务
NodeManager (NM)

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

Container

当AM向RM申请资源时,RM为AM返回的资源便是Container,YARN会为每一任务分配一个Container。

YARN工作流程

运行在YARN在上的应用程序分为两种:

  • 短程序:一般的mapreduce作业
  • 长程序: storm ,hbase

用于向YARN提交一个应用程序,YARN将分成两个阶段运行程序:

  • 1 启动ApplicationMaster
  • 2 ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到完成
    yarn的工作流程:
    《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记(1)
    步骤1:用于向YARN提交一个应用程序,其中包括AM程序,启动AM的命令,用户程序等
    步骤2:RM为该程序分配第一个Container, 并与对应的NM通信,要求它在这个Container中启动应用程序的AM
    步骤3:AM首先向RM注册,这样用户直接通过RM查看应用程序的运行状态,然后它为各个任务申请资源,并监控它的运行状态,直到运行结束,重复步骤4~7
    步骤4:AM采用轮询的方式通过RPC协议向RM申请和领取资源
    步骤5:一旦AM申请到资源后,便与对应的NtM通信,要求它启动任务
    步骤6:NM为任务设置好运行环境后,将任务启动命令写的一个脚本中,并通过运行脚本启动任务
    步骤7:各个任务通过某个RPC协议向AM汇报自已的状态和进度,已让AM随时掌控各个任务的运行状态,从而可以在任务失败时重新启动任务。
    用户可以随时通过RPC向AM查询应用程序的当前运行状态
    步骤8:应用程序运行完成后,AM向RM注销并关闭自己