yarn是一个分布式系统,它对外提供的资源调度服务,是由一系列服务进程协同完成的
yarn都有哪些服务进程?
-
Resource Manager(活跃的只有一个,可以有多个备用的–HA模式下)
职责: 统管整个集群中的所有资源(Node Manager)
负责响应客户端的请求
负责调度客户端的任务(哪个job先执行,哪个job后执行)
负责为客户的job分配资源(容器) -
Node Manager(多个)
职责: 统管NM进程所在机器的所有资源,并通过心跳通信向RM汇报自身的资源情况
负责为客户创建容器
负责回收客户用完的容器
如果nodemanager挂了,resourcemanage会重新指派其他的nodemanager
yarn为客户提供资源调度的工作流程
1. resource manager接收客户端的任务提交申请(资源申请)
2. resource manager将客户端申请放入调度队列中,安排分配资源的优先级
3. 为某个客户的申请指派特定的nodemanager去创建所需的容器
4. nodemanager从resourcemanager处领取到创建容器的任务,并创建容器
5. 客户向nodemanager发送请求,在指定容器中执行程序启动命令
6. nodemanager会回收客户使用完成的容器资源
yarn的三大调度:
FIFO : 先进先出,优先满足提交时间更早的job的资源需求
不太适合用于大型的共享集群(大job会占用所有资源很长时间,导致其他job只能等待)
Capacity Scheduler(基于容量的调度器,默认) :任务并行数和队列数一样,集群性能差一些,还想有一定的并发度,可以选择这个
预分配资源(用定义队列的方式)
大job可以放在大队列中运行,不耽误小job在别的队列中运行
但是在同一个队列中,多个job也是遵循FIFO的策略(一个任务执行完才会执行下一个)
Fair Scheduler(公平调度器):任务并发量更大,集群性能比较高的话可以采取公平调度器
可以预分配队列
但是队列和队列之间可以互相利用对方的资源
在一个队列中,多个job之间遵循公平调度原则,各
yarn的新特性:
(1)ResourceManager HA
(2)磁盘容错(nodemanager挂了会重新调配)
(3)资源调度器(以前只有fifo和capacity)