《Hadoop技术内幕深入解析YARN架构设计与原理》读书笔记 (1)
第二章:YARN的设计理念和基本架构
由于 mrv1 在扩展性,可靠性,资源利用和多框架等方面存在明显的不足,诞生了新的MapReduce,由于mrv2将资源管理模块构建成了一个独立的通用系统YARN。
2.1 YARN产生背景
- mrv1的局限性:
- 扩展性差
- 可靠性差 master/slave结构,master单点故障问题,一旦故障则整个集群不可用,
- 资源利用率低:通常一个任务无法用完所有资源,其他任务无法使用空闲资源。
- 无法支持多种计算框架
- YARN :
- 资源利用率高: 多种框架共享资源
- 运维成本低:一个框架一个集群 -》需要多个管理 -----》 现在可以同一管理
- 数据共享 :多种框架共享数据,大大减少数据转移的成本
版本对比
mrv1 :
JobTracker 由两部分组成:1 资源管理 2作业控制mr v2 + yarn: 将 jobTracker的两个功能分开,
两个版本的对比:
YARN 基本架构
将mrv1中的jobTracker 分成两个独立的服务:
- 一个全局的资源管理系统ResourceManager RS
- 每个应用程序特有的ApplicationMaster AM
RS负责整个系统的资源管理的分配,而AM负责单个应用程序(map,或reduce任务)的管理
YARN的基本架构见下图
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的工作流程:
步骤1:用户向YARN提交一个应用程序,其中包括AM程序,启动AM的命令,用户程序等
步骤2:RM为该程序分配第一个Container, 并与对应的NM通信,要求它在这个Container中启动应用程序的AM
步骤3:AM首先向RM注册,这样用户直接通过RM查看应用程序的运行状态,然后它为各个任务申请资源,并监控它的运行状态,直到运行结束,重复步骤4~7
步骤4:AM采用轮询的方式通过RPC协议向RM申请和领取资源
步骤5:一旦AM申请到资源后,便与对应的NM通信,要求它启动任务
步骤6:NM为任务设置好运行环境后,将任务启动命令写的一个脚本中,并通过运行脚本启动任务
步骤7:各个任务通过某个RPC协议向AM汇报自已的状态和进度,已让AM随时掌控各个任务的运行状态,从而可以在任务失败时重新启动任务。
用户可以随时通过RPC向AM查询应用程序的当前运行状态
步骤8:应用程序运行完成后,AM向RM注销并关闭自己