Yarn集群的资源调度
介绍
-
概述
Yarn是 Hadoop 2.x 引入的新的资源管理系统模块,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,比如内存、CPU等),它不光管理硬件资源,还管理运行的一些任务信息等。 -
Yarn调度资源可以分为两个层级
一级管理调度:管理计算机的资源、运行job任务的生命周期
二级管理调度:任务的计算模型(maptask,reducetask的代码)、多样化的计算模型(spark,storm) -
yarn集群当中各个组件的作用
ResourceManager:主节点,主要用于接受用户请求,分配资源
NodeManager:从节点,主要用于处理任务的计算
ApplicationMaster:每提交一个任务,启动一个appmaster,它全权负责管理我们任务的执行。
主要职责:申请资源,分配资源(分配Container),监控任务执行的进度状况,回收资源,和resourceManager通信,报告任务的执行状况“自杀”
Container:资源分配的单位,所有的资源都是以caontainer的形式来进行划分的,便于资源的分配和回收
JobHistoryServer:历史完成的任务信息
TimeLineServer:2.4版本之后出来的新特性,查看正在执行任务的信息
调度器
-
概述
调度器是解决任务先后提交,如何保证任务最快执行的一种策略,研究的是任务之间如何一起执行的问题 -
Hadoop当中的调度器主要有三种
第一种:fifo 队列调度器(first in first out)(没人用)
运行规则:第一个任务来了,先执行,第二个任务来了,等着
弊端:如果有一个很大的计算任务先来,需要执行两个小时,再来一个小任务,需要两分钟,第二个任务必须要等第一个完成。
第二种:capacity scheduler 容量调度器(apache的hadoop版本默认使用的调度器)
运行规则:将集群的资源,划分成好几个队列,任务提交的时候,可以选择不同的队列进行提交。
优点:根据提交任务需要资源的大小不同,可以将任务划分到不同给的队列下面去。
第三种:fair scheduler 公平调度器(CDH版本的hadoop默认的调度规则)
运行规则:如果没有任务提交,收到第一个任务,将进群当中所有的资源全部给第一个任务,如果此时收到第二个任务,就会将第一个任务的资源划分一点出来给第二个任务,让第二个任务也可以执行,以此类推,保证每一个任务都可以公平地一起执行
一般调度器不改
Yarn常用参数设置
-
yarn.nodemanager.resource.memory-mb
定义每台机器的内存使用大小,默认8192M -
yarn.nodemanager.resource.cpu-vcores
定义每台机器的虚拟内核使用大小,默认8个 -
yarn.nodemanager.vmem-pmem-ratio 2.1
定义交换区空间可以使用的大小(交换区空间就是讲一块硬盘拿出来做内存使用)
这里指定的是nodemanager的n内存的2.1倍
tips
yarn的发展历程以及详细介绍:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/