么是Yarn?
从Hadoop2开始,官方把资源管理单独剥离出来,主要是为了考虑后期作为一个公共的资源管理平台,任何满足规则的计算引擎都可以在它上面执行。所以YARN可以实现HADOOP集群的资源共享,不仅仅可以跑MapRedcue,还可以跑Spark、Flink。
Yarn架构分析
ResourceManager:是主节点,主要负责集群资源的分配和管理NodeManager:是从节点,主要负责当前机器资源管理
Yarn资源管理模型
YARN主要管理内存和CPU这两种资源类型
当NodeManager节点启动的时候自动向ResourceManager注册,将当前节点上的可用CPU信息和内存 信息注册上去。
网络异常,图片无法展示
|
集群内存:24GB
集群CPU 16Cores
网络异常,图片无法展示
|
活跃从节点3个,其中主节点是主从一体节点
这里显示的节点参数是
- yarn.nodemanager.resource.memory-mb:单节点可分配的物理内存总量,默认是8MB*1024, 即8G
- yarn.nodemanager.resource.cpu-vcores:单节点可分配的虚拟CPU个数,默认是8
就算你机器没有,读取默认的也会读取到这个值,属于虚标。
Yarn资源调度
集群资源是有限的,所以需要用资源调度器来进行合理分配。
资源调度器分为三种
- FIFO Scheduler:先进先出
- Capacity Scheduler:先进先出的多队列版本,队列内部先进先出
- FairScheduler:多队列,多用户共享资源
网络异常,图片无法展示
|
- FIFO Scheduler:是先进先出的,大家都是排队的,如果你的任务申请不到足够的资源,那你就等 着,等前面的任务执行结束释放了资源之后你再执行。这种在有些时候是不合理的,因为我们有一些 任务的优先级比较高,我们希望任务提交上去立刻就开始执行,这个就实现不了了。
- CapacityScheduler:它是FifoScheduler的多队列版本,就是我们先把集群中的整块资源划分成多 份,我们可以人为的给这些资源定义使用场景,例如图里面的queue A里面运行普通的任务, queueB中运行优先级比较高的任务。这两个队列的资源是相互对立的 但是注意一点,队列内部还是按照先进先出的规则。
- FairScheduler:支持多个队列,每个队列可以配置一定的资源,每个队列中的任务共享其所在队列 的所有资源,不需要排队等待资源 具体是这样的,假设我们向一个队列中提交了一个任务,这个任务刚开始会占用整个队列的资源,当 你再提交第二个任务的时候,第一个任务会把他的资源释放出来一部分给第二个任务使用
实际工作中,我们一般使用第二种资源调度器