Yarn
Yarn的基本架构和工作流程
由前面所说,Yarn由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。四个组件的作用如下
RM
- 处理客户端的请求
- 和NM通信,监控其运行状况
- 启动或监控ApplicationMaster
- 负责整合集群计算资源的分配和调度
NM
- 管理单个节点上的资源
- 负责处理来自RM上的请求
- 处理来自Application的请求
ApplictaionMaster
- 负责数据的切分
- 为应用程序申请资源并分配任务
Container
是抽象的一个任务在一个Container上运行,用于防止一个任务运行时资源被其他任务占用
工作机制
- Mr程序提交到客户端所在的节点
- 客户端向RM申请一个Application
- RM返回Application资源提交路径以及返回Application——id
- 提交本地资源(配置文件,Jar包,分片等)
- 资源提交完毕后,客户端向RM申请运行ApplicationMaster.jobrunner
- RM将用户的请求初始化一个Task
- 一个NM领取任务,并生成一个Container,包装运行的资源
- 下载job的资源到NM,并创建一个MRAppmaster。
- NM向RM申请运行一个MapTask容器
- MRAppmaster将分别申请MapTask和ReduceTask的运行容器
- NM运行阶段。
调度器
调度以Task为基本单位
FIFO调度器
FIFO包装先提交的Task先申请到资源,后提交的后申请资源,当出现一个大任务时,可能出现后面的小任务被卡住。资源利用率低!不能满足多样化Job处理的需求
容量调度器
有多条队列,每条队列都有FIFO.根据Job提交到队列的顺序为Job的task分配资源!
- 每个队列,用户,Job都可以配置使用资源的容量(最低限制,最高限制)
- 空闲队列冗余的资源,可以临时借调给其他队列使用一旦空闲队列,提交了新的job,借调的资源会被锁定,在使用完后立刻归还
- 权限保证。每个用户只能查看自己提交job的信息
- 配置灵活。集群管理员可以指定队列的管理员等!所有参数可以在线修改,及时生效!动态管理!
公平调度器
对容量调度器在调度策略上的改进!
- 和容量调度器类似!多个FIFO队列组成!
- 每个队列中,每个Job获取到资源的数量是平等的!
- 小的Job占优势,可以获取到自己需要的足够资源! 大的Job占劣势,不能获取到自己需要的足够资源!但是不至于饿死,可以使用部分资源启动部分task!