这是我参与「第四届青训营 」笔记创作活动的第 15 天!
YARN 概述
YARN是一个分布式的资源管理系统。
YARN是Hadoop系统的核心组件,主要功能包括负责在Hadoop集群中的资源管理,负责对作业进行调度运行以及监控。
Yarn主要由三个组件组成:
- ResourceManager:他是整个集群资源的老大,负责整个集群系统的资源分配与调度。
- NodeManager:他是单个节点的老大,管理本节点的用户作业和工作流。
- ApplicationMaster:他是单个应用程序的老大,负责单个应用的监控运行。
YARN的资源分配
每个NodeManager能使用机器的多少资源呢?每个程序的每个Task需要使用多少资源来运行呢?
YARN的资源配置
首先,要先了解AM: application master, 对于每一个应用程序都有一个AM, AM主要是向RM申请资源,资源其实就是Container, 目前这个Container就是cpu cores, memory, 然后在每个NodeManager上启动Executors,即进一步分布资源给内部任务,监控跟踪应用程序的进程等。
然后这里就引入了YARN的调度框架问题: 双层调度框架。
(1)RM统一管理集群资源,分配资源给AM。
(2)AM将资源进一步分配给Tasks。
YARN的任务调度
什么是调度?
如果我们向YARN中提交运行了多个程序,而YARN中整个集群的资源是固定的,那么谁先执行,谁后执行呢?大家又怎么分配资源呢?分配资源的类型就是调度资源的方法。
调度类型:三种
1.FIFO:先进先出
YARN中构建一个队列【管道:一头进,一头出】 所有提交的任务都按照提交的时间放到队列中,先放入的程序,享有整个YARN中的所有资源,哪怕你用不了,那也是你的。直到先放进去的程序运行完成,才会运行第二个程序。
特点:
单队列,先进先出。
运行的程序,享有所有资源。
程序不能并行也不能并发。 并行:多个程序在不同的队列中同时运行 并发:在一个队列中多个程序同时运行
2.Capacity:容量调度机制
YARN中构建多个队列,每个队列是FIFO
将整个YARN的资源分配到不同的队列中,运行程序时,可以指定将程序提交到哪个队列中运行。
特点
多队列,但是每个队列内部还是FIFO,并行运行多个程序,每个程序运行在不同的队列中 支持资源的动态抢占:如果队列1的资源不够,队列2的资源非常充足,借队列2的资源来运行。
3.Fair:公平调度机制
YARN中构建多个队列,每个队列是公平的共享资源的,还可以同时运行多个程序,支持一个队列中并发运行多个程序,让每个程序都能拿到资源。
特点
多队列,队列内部的每个程序共享资源
允许一个队列中并发运行,运行多个队列并行运行
也支持队列间的资源的动态抢占
指定队列程序的优先级
修改调度机制的配置:yarn-site.xml