一.简介
yarn(Yet Another Resource Negotiator) 是一种新的资源管理器以及通用资源管理系统.
它提供了资源管理,任务调度及监控,提高了集群的管理效率等
二.产生背景
在hadoop1.x中主要是一个jobTracker带领多个TaskTracker进行工作,jonTracker的压力太大,容易出现单点故障和负载过重等问题.因此诞生了yarn
三.yarn的特点及应用
资源管理和计算框架的解耦设计,提高利用率
只需要运维一个集群就可以满足多种计算框架的需求
避免了单点故障,以及集群可扩展性低的问题
只要涉及到资源管理和任务调度的平台均可以使用
四.架构设计
yarn将资源管理和任务调度分配给了两个角色,分别是负责统筹全局的ResourceManager和每个应用中唯一的ApplicationMaster.实现了分布式的管理应用
4.1基本组成
client: 面向用户,作为用户和ResourceManager交互的桥梁
ResourceManager: 整个集群只有一个是激活的,可以存在其他相同副本,负责整个集群的资源分配和调度.同事负责启动和监控ApplicationMaster
NodeManager: 整个集群中存在若干个,负责单个节点的资源调度和任务分配,同事也负责接受来自ApplicationMaster的命令,接受ResourceManager启动和停止container的命令
ApplicationMaster: 每一个程序都有,负责整个程序的管理,会进行数据切分,向ResourceManager申请资源,与NodeManager进行通信来进行启动和停止任务.
Container: 任务运行时的环境的抽象
4.2运行流程图
4.3运行流程
1.用户向yarn提交命令
2.ResourceManager分配一个Container并且让NodeManager在Container中启动一个ApplicationMaster
3.ApplicationMaster向ResourceManager注册,用户可以通过ApplicationMaster对任务进行查看,如果一次没有申请到位,会先试用已经申请到的,剩余的会通过RPC方式继续向ResourceManager进行申请
4.申请到资源后,ApplicationMaster告诉NodeManager启动任务
5.NodeManager接受命令并启动Container中的任务
6.每一个Container向ApplicationMaster汇报任务执行情况,进行心跳机制,在任务失败时,ApplicationMaster会重启任务
7.等待全部任务完成以后,ApplicationMaster会告知ResourceManager,并且申请销毁自己.
五.调度策略
5.1MRv1的调度策略
集中式调度器,将所有的功能集中在单一进程中,会导致扩展性差和规模受限等问题
5.2Yarn调度策略
yarn采用双层调度架构,优点是将集中式的调度器一分为二(ResourceManager和ApplicationMaster),减轻压力
5.3常用的调度策略
5.3.1FIFO Schedule(先进先出)
把用户提交的作业排成队列,使用先进先出的原则,缺点是可能会有比较大的作业占用资源过多,导致队列堵塞
5.3.2Capacity Schedule(容器调度器)
多用户共享集群,每个用户或者组织分配了专门的队列.不支持抢占模式.缺点是可能会造成资源浪费
5.3.3Fair Schedule(公平调度器)
所有用户分配公平的资源,支持抢占.可以划分多队列.但是缺点是可能会出现任务被中途杀死的情况
六.yarn shell应用
yarn常用命令:yarn version 查看版本信息
yarn jar 提交jar包
yarn classpath 获取运行时的classpath
yarn application -list 查看所有正在运行的application列表
yarn application -kill +id 杀死对应的application
yarn top 查看yarn当前资源使用情况
七.容错性
1.基于Zookeeper实现HA,避免单点故障
2.AM挂掉以后,RM会重启AM,已经完成的Task不会重新运行.
3.若任务失败,会由AM进行决定处理,若包含AM,则RM会重启AM
4.Task Failure会通过心跳机制将信息告诉AM,若超时或失败,AM会重新恢复Task