1. Yarn的基础架构
Yarn是一个主从架构
主节点:ResourceManager
从节点:NodeManager
(2)ResourceManager功能
1)接受客户端发起的任务,并将该任务交给NodeManager去执行
2)划分整个集群的计算资源
(3)NodeManager
1)真正的去执行计算任务
2)真正的资源的提供者(内存和CPU)
3)NodeManager会定时向ResourceManager汇报资源使用情况,并保持心跳
(4)AppMaster(Application Master)
1)每启动一个任务job,就会启动一个该任务的管理者AppMaster,有多少个任务就会有多少个AppMaster
2)AppMaster负责整个任务从提交到结束整个的过程
(5)Container
1)Container可以理解为一个抽象的资源容器,是资源分配的单位,本质上是Java类对象
2)Container内部包含的计算资源
Container {node1:2G-2vcore,node2:4G:4vcore}
3)Container本身没有资源,它只是告诉Job,去哪里要多少资源
2. 任务在Yarn上的执行流程
client向RM提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
ResourceManager启动一个container用于运行ApplicationMaster。
启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与RM保持心跳。
ApplicationMaster向ResourceManager发送请求,申请相应数目的container。
ResourceManager返回ApplicationMaster的申请的containers信息。申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后,AM与对应的NodeManager通信,要求NM启动container。AM与NM保持心跳,从而对NM上运行的任务进行监控和管理。
container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息。
应用运行期间,client直接与AM通信获取应用的状态、进度更新等信息。
应用运行结束后,ApplicationMaster向ResourceManager注销自己,并允许属于它的container被收回。
3.Yarn的调度器
3.1 队列调度器(FIFO Scheduler)
该调度器,会将提交的Job放入一个队列中,先进入的Job会优先得到所有资源,可能会导致某个一个Job占用大部门资源,而且执行时间较长,会影响后期job的运行,所以该调取策略一般不用
3.2 容量调度器(Capacity Scheduler)
Apache的Hadoop默认使用的就是该调度器
容量调度器是将整个资源划分成多个队列,每一个队列占用一部分资源
在提交任务时需要指定你要使用哪一个队列的资源,如果没有指定则使用默认队列
容量调度器默认只有一个队列:default队列,如果想要建立其他队列则需要手动来设置
执行任务的队列必须是叶子,也就是队列树中最末端队列
给队列设置的资源占比都是资源的下限比例,默认最多可以使用%100的全部资源
3.3公平调度器(Fair Scheduler)
CDH(Cloudera Hadoop)默认就使用该调度器
不管来多少job任务,都会对总资源进行平均分配