hadoop资源调度器
hadoop支持多用户环境,在生产环境中,往往一个大的hadoop集群,供多个应用如Hive,Mahout等之类的使用。在多用户环境下,有的用户提交的工作量很大、很频繁,而有的很少,还有的优先级很高,那么如何保证“按需”来为各个用户分配资源(内存、CPU、带宽、IO、磁盘)呢?这就需要用到资源调度器。
这里,我对hadoop的资源调度做个简单的归纳总结:
一、基本术语
用户分组管理
用于按组为单位组织管理,某个用户只能向固定分组中提交作业,只能使用固定分组中配置的资源;同时可以限制每个用户提交的作业数,使用的资源量等
作业管理
包括作业提交权限控制,作业运行状态查看权限控制等。如:可限定可提交作业的用户;可限定可查看作业运行状态的用户;可限定普通用户只能修改自己作业的优先级,kill自己的作业;高级用户可以控制所有作业等。
用户(User)
Hadoop使用Linux用户管理,Hadoop中的用户就是Linux中的用户
分组(group)
Hadoop使用Linux分组管理,Hadoop中的分组就是Linux中的分组
池(pool)
Hadoop Fair Scheduler中的概念,一个pool可以是一个user,一个group,或者一个queue。
队列(Queue)
队列是Hadoop提出的概念,一个Queue可以由任意几个Group和任意几个User组成。
二、资源调度管理简介
Hadoop的资源管理核心:
存储容量管理
HDFS存储管理
计算容量管理
MR任务槽管理
任务调度器
三、存储容量管理
主要是对HDFS的管理:
HDFS本身也是一种文件系统,与Linux文件系统有类似之处
对用户组、用户、路径设置Quotas(包括空间大小和文件数量)
Hadoop dfsadmin -setSpaceQuota size path
hadoop dfsadmin -setQuota number path
Hadoop共享Linux的用户组和用户
HDFS的权限控制:用户和用户组
四、计算容量管理
主要是对MapReduce任务槽的管理,任务槽也可以理解为服务器的资源综合统称:
CPU(如何设置MR,见下面备注)
内存(设置子任务的jvm参数和GC参数。在1 . 0以后的版本中,可以全局M/R内存和Job M/R内存)
网络带宽
磁盘IO
单台主机或整个集群资源是有限的。在多任务、多用户环境下,大量并发提交和执行任务是非常常见的,这就导致资源不足而竞争,如何保证在有限资源或业务约束下有序调度和执行任务,需要有一个协调者,这就是Hadoop的资源调度器。
Hadoop的调度器
FIFO(default)。先进先出调度器
Hadoop默认提供。
Fair Scheduler(plugin)。公平调度器
Facebook提供。
Capacity Scheduler (plugin)。容量调度器
Yahoo提供。
1、 FIFO Scheduler
先进先出调度器
优点:
Hadoop默认提供。非常简单、JobTracker无负担
支持五级优先级,每级一个队列,从队列优先级高低提取任务执行。五级分别是:Very Low 、Low 、Normal 、High 、Very Hign;
在同级队列中,按提交Job的时间先后顺序执行
无需额外配置
缺点:
完全忽略不同作业的需求差异
2、Fair Scheduler
公平分享调度器:在多个用户之间共享集群资源。它按资源池来组织作业,并把资源按时间公平地分到这些资源池里。在每一个资源池内,会使用公平共享地方法在运行作业之间共享容量。
特征:
支持多用户(默认一个用户对一个池,依赖于Linux多用户环境)
资源公平共享(公平共享量由优先级决定,同优先级按FIFO调度)
保证最小共享量
支持时间片抢占
限制作业并发量,以防止中间数据塞满磁盘
3、Capacity Scheduler
容量调度器:使多个用户可以安全地共享一个大的集群,应用程序可以在容量限度下获取到需要的资源,最大化集群的吞吐率和利用率。它按队列来组织作业,每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源。
特征:
层次化的队列
层次化的队列支持在一个组织内子队列的优先共享资源,从而提供了更多的控制和预
测的能力,不支持抢占
资源容量保证
队列实现了一种资源的划分,所有的应用都会被指定到特定的队列,这些应用所能使用到的资源受到队列所拥有资源的限制
安全性
每一个队列都有一个严格的ACL来控制那些用户可以访问队列,并且有一个safe-guard来保证用户不能够看或者修改其他用户的应用,而且每个队列或系统都可以设置管理员角色。
弹性
空闲的资源可以分配给任何队列,这样可能超出队列的资源限制。也就是说,如果集群有空闲的资源,而有些队列需要的资源超出了分给他的限制,这些空闲的资源将被分配给这些队列,这样就保证了资源的可预测性和弹性,从而防止了人工孤岛,帮助实现资源的优化利用。
多用户
系列的综合设置可以防止单一的应用或用户占用队列或集群的全部资源,防止集群被单用户过度使用,从而保证了多用户可以共同使用集群
可操作性
RuntimeConfiguration:一些设置可以在运行时进行配置,例如资源分配的容量, ACL
基于资源的调度
支持资源密集型的应用,应用可以被指定分配超出缺省设置的更多的资源
Fair VS Capacity
相同点
均支持多用户多队列,即:适用于多用户共享集群的应用环境
单个队列均支持优先级和FIFO调度方式
均支持资源共享,即某个queue中的资源有剩余时,可共享给其他缺资源的queue
异同点
核心调度策略不同。 计算能力调度器的调度策略是,先选择资源利用率低的queue,然后在queue中同时考虑FIFO和memory constraint因素;而公平调度器仅考虑公平,而公平是通过作业缺额体现的,调度器每次选择缺额最大的job(queue的资源量,job优先级等仅用于计算作业缺额)。
内存约束。计算能力调度器调度job时会考虑作业的内存限制,为了满足某些特殊job的特殊内存需求,可能会为该job分配多个slot;而公平调度器对这种特殊的job无能为力,只能杀掉这种task。
单一用户环境下,Fair只能共享一个池,Capacity可以多队列
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐