YARN 简介
YARN
Yarn产生背景
Yarn直接来自于MR1.0.
MR1.0 问题:采用的是master slave结构,master是JobTracker。Slave是TaskTracker、JobTracker整个集群只有一个,构建调度和资源管理,两个功能。每个节点上,可以通过一个TaskTracker控制本节点的资源管理和任务管理。每个TaskTracker通过心跳机制周期性的向JobTracker发送本节点的资源使用情况以及任务运行状态,JobTracker会通过心跳应答将新的命令或者任务发送至TaskTracker。
1、 JobTracker是一个性能瓶颈,既负责资源管理有负责作业调度,实际上,资源管理是所有的计算框架共有的一个模块,不能将其寄宿在某一个特殊的计算框架中,另,作业调度模块是与应用层相关的,与通用的资源管理模块分开。
2、 JobTracker是一个单点故障,一旦出现宕机,整个集群将无法正常使用,
3、 只支持Map Reduce这一种计算模型,如果希望支持Map-reduce-reduce这种计算框架,无法支持,需要修改JobTracker。
4、 MRv1.0 扩展性差、可靠性差、资源利用率低(MRv1采用了基于槽位的资源分配模型,槽位是一种粗粒度的资源划分单位;通常一个任务不会用完槽位对应的资源,且其他任务也无法使用这些空闲资源,无法支持多种计算框架)
Yarn基本构成与资源调度
主从架构
也是采用 master(Resource Manager)- slave (Node Manager)架构,Resource Manager 整个集群只有一个,一个可靠的节点。
1、 每个节点上可以负责该节点上的资源管理以及任务调度,Node Manager 会定时向Resource Manager汇报本节点上 的资源使用情况和任务运行状态,
2、 Resource Manager会通过心跳应答的机制向Node Manager下达命令或者分发新的任务,
3、 Yarn 将某一资源分配给该应用程序后,应用程序会启动一个Application Master,
4、 Application Master为应用程序负责向Resource Manager申请资源,申请资源之后,再和申请到的节点进行通信,运行内部任务。
两层调度
1、 第一层是Yarn中Resource Manager将资源分配(Driver Application Master所需要的资源)给各应用程序,
2、 第二层是应用程序(Application Master启动后,向Resource Manager申请Container资源,即Executor运行所需要的资源)申请资源成功,ResourceManager将资源分配给内部的各种任务,在对应的节点上启动Container以运行Application Master分发过来的任务。
Yarn中,任务会运行在Container的一个容器内,封装的是整个任务的运行环境,比如CPU、内存等环境变量封装在container中,在container中运行。
ResourceManager
全局资源管理器,整个集群只有一个,负责集群资源的统一调度和任务管理.
主要由两个组件构成:资源调度器 Resource Scheduler 和应用程序管理器(Applications Master -- ASM)
调度器:
1、 调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序
2、 不负责具体应用程序的相关工作,比如监控或跟踪状态
3、 不负责重新启动失败任务
4、 资源分配单位用“资源容器”(Resource Container)表示
5、 Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务的资源量
6、 调度器是一个可拔插的组件,用户可以自行设计
7、 Yarn提供了多种直接可用的调度器,比如Fair Scheduler、Capacity Scheduler等
ResourceManager详细功能:
1、 处理客户端请求,
2、 启动/监控Application Master(每个应用程序有一个,每个应用程序的master负责该应用程序的资源申请,任务调度,任务容错等),
3、 监控Node Manager(如果一个节点挂了,Resource Manager会将运行在该Node Manager上的任务通知Application master,让application master触发新的调度或者其他操作,),
4、 资源分配与调度。(集群中所有节点的资源统筹灵活的智能的分配给各个应用程序)
应用程序管理器 ( Application Master )
负责管理整个系统的所有应用程序
用户提交的每个应用程序只有一个,负责应用程序的管理
AM主要功能:
1、 与RM调度器协商以获取资源(用Container表示)
2、 将得到的任务进一步分配给内部的任务
3、 与NM通信以启动/停止任务
4、 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务
5、 YARN自带的AM实现:一个用于演示AM编写方法的示例程序distributedshell
详细功能:
1、 数据切分,
2、 为应用程序申请资源,并进一步分配给内部任务,
3、 任务监控与容错
Node Manager
整个集群有多个,负责单节点资源管理和使用,每个节点上的资源和任务管理器
详细功能:
1、 定时向RM汇报本节点上的资源使用情况和各个Container的运行状态
2、 单个节点上的资源管理和任务管理
3、 处理来自Resource Manager的命令(杀死任务或重启节点等)
4、 处理来自Application Master的命令(启动task等命令)
Container
是Yarn中的资源抽象,封装了某个节点上的多维度资源,对任务运行环境的抽象
Yarn会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源
Container不同于MRv1中的slot,是一个动态资源划分单位,是根据应用程序的需求动态生成的。
描述一系列信息:
1、 任务运行资源(节点、内存、CPU),任务执行在哪个节点,占用多少内存,多少CPU
2、 任务启动命令,
3、 任务运行环境,
4、 当Yarn把一个资源(管理资源)2G内存,一个CPU分配给一个应用程序的时候,将运行资源的描述封装为一个container,发送给Application master,application master根据资源的特点将资源分配给内部的某一个task,之后再与node manager通信启动container,进而启动task。
Yarn通信协议
1、 RPC协议是连接各个组件的“大动脉”
2、 Yarn 采用的是拉式(pull-based)通信模型
3、 任何两个需要相互通信的组件之间只有一个RPC协议
4、 对于任何一个RPC协议,通信双方有一端是Client,另一端为Server,且Client总是主动连接Server的。
Yarn主要由以下几个RPC协议组成:
1、 ApplicationClientProtocol:JobClient通过该RPC协议提交应用程序、查询应用程序状态等。
2、 ResourceManagerAdministratorProtocol:Admin通过该RPC协议更新系统配置文件,比如节点黑白名单,用户队列权限等
3、 ApplicationMasterProtocol:AM通过该RPC协议向RM注册和撤销自己,并为各个任务申请资源
4、 ContainerManagerProtocol:AM通过该RPC要求NM启动或者停止Container,获取各个Container的使用状态等信息。
5、 ResourceTracker:NM通过该RPC协议向RM注册,并定时发送心跳信息汇报当前节点的资源使用情况和Container运行情况。
Yarn工作流程
运行Yarn的应用程序有两类:短应用程序和长应用程序。
短应用程序
指在一定时间内可以运行完成并正常退出的应用程序,比如MR作业
长应用程序
是指不出意外,永不终止运行的应用程序,通常是一些服务,Storm Service,HBase Service等。
当用户向Yarn提交一个应用程序后,Yarn将分两步执行该应用程序:首先启动Application Master,然后由Application Master启动应用程序。
从并行编程的角度理解YARN
为快速处理一个大数据集,通常采用多线程并行编程
Yarn 总结- 资源管理系统
对集群中各类资源进行抽象;按照一定的策略,将资源分配给应用程序或服务;采用一定的隔离机制防止应用程序或者服务之间因资源抢占而相互干扰
引入YARN这一层后,各种计算框架可各自发挥自己的优势,并由YARN进行统一管理。
云计算概念与Yarn
三层服务:Infrastructure As A Service IaaS、PaaS和SaaS
1、 IaaS:基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务
2、 PaaS:平台即服务。PaaS是将软件研发的平台作为一种服务,以SaaS的模式提交给用户
3、 SaaS:软件即服务。 它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动
YARN可以看作PaaS层,它能够为不同类型的应用程序提供统一的管理和调度