Hadoop详解(十):Hadoop作业调度机制

Hadoop详解(⼗):Hadoop作业调度机制
Hadoop 作为⼀个分布式计算平台,从集计算的⾓度分析,Hadoop可以将底层的计算资源整合后统⼀分配到集中的计算节点,从⽽达到分布式和并⾏计算的⽬的,最终完成任务的⾼效执⾏。在调度机制中涉及的三个核⼼问题:
1. 计算资源的组织
2. ⽤户作业的选择
3. 任务的分配策略
在⽬前的Hadoop 系统中,默认的调度器为FIFO调度,主要适合单队列的批处理作业需求,针对多⽤户多队列的控制需求,雅虎开发并且向开源社区贡献了容量调度器(Capacity Scheduler)和Facebook开发并贡献了公平调度器(FAIR Scheduler)。
1. 作业调度概述
1.1 作业调度相关概念
作业管理:在调度系统中作业管理包括作业提交权限控制,作业运⾏状态查看权限控制等。
⽤户和分组:在Hadoop系统中以组为单位组织管理作业,每个⽤户只能向固定分组中提交作业,只能使⽤固定分组中配置的资源。同时可以限制每个⽤户提交的作业数、使⽤的资源等。
资源池:是Hadoop公平调度Fiar Scheduler中的概念,⼀个资源池可以对应⼀个⽤户(User)、⼀个分组(Group)、或者⼀个队列(Queue)。
队列:队列是Hadoop中提出的概念,⼀个队列(Queue)可以由任意⼏个分组(Group)和任意⼏个⽤户(User)组成。
资源槽位:是Hadoop分布式系统进⾏资源管理的基本单位,是集计算资源的抽象化,每个资源槽位都代表可以运⾏的⼀个任务(Map任务和Reduce任务)。Hadoop集中的每个计算节点都拥有⼀定数量的资源槽,具体数⽬需要每个⽤户依据每个节点的内存、CPU等信息确定并配置,默认每个节点两个资源槽位,表⽰每个计算节点可以并发运⾏两个任务
作业调度和任务调度:第⼀级是作业调度,也就是作业选择,作业调度器选取作业集合中的⼀个等待调度的作业。第⼆级是任务调度,也就是任务分配,由任务调度器在第⼀级选择的作业中选取⼀个就绪的任务来运⾏。
⼼跳:主节点负责管理所有从节点的资源,⽽这种管理是通过主从节点之间的⼼跳信息来互相通信的,也就是从节点定时向主节点发送状态信息————⼼跳信息来报告⾃⼰当前的状况
本地化资源和⾮本地化资源:待调度资源的作业集合中有⼀个作业⾄少存⼀个任务的代处理数据存位于该计算节点上,那么就可以称为这个计算节点是这个作业的本地化资源。
本地化调度和⾮本地化调度
1.2 作业调度流程
1. Client 通过submitJob()函数向JobTracker提交⼀个作业。
2. JobTacker接收到⽤户的作业提交后会通过notify()函数通知调度器TaskScheduler有新作业
ire3. TaskTracker通过heartbeat⼼跳机制向JobTacker汇报TaskTracker的资源情况,JobTreacker同时获取TaskTrackerStatus信息,如果
TaskTracker资源是空闲的,则主动向JobTracker请求分配任务。
4. JobTracker根据对TaskTracker资源的管理情况,请求调度器TaskScheduler分配作业,TaskScheduler根据对应的资源情况和任务数量,分配
作业列表返回给JobTracker。
5. JobTracker接收到分配的作业列表,再通过HeartBeat⼼跳信息将任务分发给具体的TaskTracker,最终启动Task任务完成作业。
1.3 集资源组织和管理
Hadoop系统作业调度是以计算槽位slot来组织集计算资源的,计算槽位可以认为是Hadoop集中计算资源的抽象,是集资源管理的基本单位,计算槽位slot资源包括两种类型:Map slot和Reduce Slot
2. FIFO 调度器
FIFO调度器是Hadoop默认的调度器,其调度策略简单,容易实现,并且调度效率最⾼。
2.1 基本调度策略
类似于Linux操作系统中的FIFO先进先出进程调度算法,Hadoop FIFO调度器的调度策略是将⽤户提交的作业按照先后顺序放在⼀个队列中,然后依据先后顺序和优先级顺序被依次调度执⾏,整体上遵循先进先出基本原则。
FIFO调度策略遵循以下基本原则:
所有⽤户提交的作业会统⼀按照提交的先后顺序排列在同⼀个队列中。
⽀持优先级,包括VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOW
在优先级相同的情况下,按照先来先服务的模式调度执⾏。
在优先级不同的情况下,优先级⾼的作业仙贝调度执⾏。
FIFO调度器有三种基本情况:
1. 队列中只有⼀个作业时直接调度执⾏,如上图a只有⼀个Job1,则调度器JobQueueTaskSchedule直接将Job1调度分配给集的计
算节点TaskTracker执⾏;
2. ⽤户在Job1之后先后提交了Job2和Job3,并且Job2和Job3的优先级是相同的。这个时候先运⾏Job2,然后再运⾏Job3
3. ⽤户在Job1之后先后提交了Job2和Job3,⽽Job3的优先级⽐Job2的优先级⾼,那么Job1运⾏完成
之后,先调度Job3然后调度
Job1.
总结:FIFO调度器逻辑设计简洁,对于单⽤户集系统来讲⽐较适合,同时系统利⽤率⾼,响应时间也很短,但是对于多⽤户共享集资源的情况下就会出现不能区别不同⽤户、不同作业类型的情况。
2.2 任务分配算法
中华全国慈善总会1. 获取当前TaskTracker的Map和Reduce数量信息
2. 计算需要运⾏的Map和Reduce的数量(也就是处于正在运⾏状态和挂起状态的)
龙生九子各有所好
3. 计算Map和Rduce的负载因⼦:负载因⼦表⽰整个集的负载情况,很明显,负载因⼦越⼤集的负载越⾼,随着任务的执⾏集负载会减少,⽽葡萄糖酸钠
⽤户也会不断地向队列中提交作业,这样集整个负载因⼦⼜会增加,因此在实际的集环境中⽐较⾼效的状态是负载因⼦维持在⼀个动态的范围之内。
4. 计算tasktracker当前Map容量以及最⼤可分配的Map任务数量,然后调度分配map任务。
5. 计算tasktracker当前Reduce容量以及最⼤可分配的reduce任务数量,然后调度分配reduce任务。
3. 公平调度器
FIFO调度器的问题:FIOF调度器不⽀持多个队列,也不⽀持多个⽤户共享集,这样就造成了集资源利⽤率过低,对于不同类型的作业不能保证公平调度器等问题,公平调度器FairScheduler就这样产⽣了。
3.1 主要功能
实现了类似Linux内核的Fair-Share调度算法,以保证各个作业基本上能公平共享整个集的资源。
⽀持多⽤户、多队列和划分资源池。
⽀持资源池最⼩共享保证和最⼤作业限制。
共享权重可分配:通过调整共享权重使得⾼优先级作业、⼤作业共享更多的资源。
⽀持资源抢占:当⼀个资源池有空闲资源槽时,调度器会将其共享给需要资源调度的资源池。
胞嘧啶实现了延迟调度:延迟调度机制可以调数据本地任务的效率。
3.2 基本调度策略
公平调度策略的核⼼概念是随着时间的推移能平均获取同等的共享资源。当单独⼀个作业任务运⾏时,它将使⽤整个集;当有其他作业被提交时,系统会将任务(task)空闲时间⽚(slot)赋给新的作业,以使得每⼀个作业都能获取等量的CPU时间。
公平调度器中有⼀个资源池pool的概念,并通过资源池来组织作业,把资源公平地分配到这些资源池⾥⾯。在默认的情况下,每⼀个⽤户都拥有⼀个独⽴的资源池,以使得每⼀个⽤户都能获取⼀份同等的集资源⽽不管其提交了多少作业。
在每⼀个资源池内,会使⽤公平共享的⽅式在运⾏的作业间共享资源。⽤户可以给予资源池相应的权重,以不按⽐例的⽅式共享集。除了提供公平共享的⽅法之外,公平调度器允许赋给资源池以保证最⼩的共享资源。
公平调度器也⽀持在可配置的超时时间后对允许的作业进⾏抢占。如果新的作业在⼀定时间内还获取不到最⼩的共享资源,这个作业别允许去终结已运⾏的作业中任务以获取运⾏所需要的资源。
4. 容量调度器
容量调度器是雅虎结合⾃⼰的集业务类型,提出的⼀种多⽤户调度器,这种调度器⽀持多⽤户、多队列,每⼀个队列都可以单独配置⼀定的资源量,每个队列采⽤FIFO策略,可以看做是FIFO调度器的多队列版本。
4.1 产⽣背景
公平调度器强调的是各个作业的公平共享原则,主要是保证资源池之间以公平地共享整个集资源,然⽽整个集的资源利⽤率的⾓度来看,公平调度并不能保证整个集的资源的利⽤率最⾼,也就是虽然各种作业对资源的使⽤可以达到公平地原则,保证⽤户都可以公平地分享整个集的资源,但是仍然存在计算资源利⽤率不⾼的问题,容量调度器就是⽤来解决这个问题。
头版头条在容量调度器中,每个作业被提交到⼀个队列中,每个队列分配整个集资源的容量(capacity)的⼀定⽐例,队列中的作业以FIFO的⽅式占⽤整个队列分配的资源(capacity)。调度的基本策略是⾸先选择⼀个容量capacity实际占⽤率最低的队列,这样最需要资源的队列优先调度,然后从FIFO队列中选择⼀个合适的作业。
4.2 主要功能
⽀持多⽤户多队列
层次化队列机制
资源容量保证
作业权限控制
弹性资源分配
运⾏时的控制功能
基于资源的调度
作业内存控制
延迟调度机制
4.3 基本调度策略
容量调度器的计算能⼒调度⽰意图如下:假定Hadoop集中有100个计算资源槽位。调度器中配置了队列P和队列S,队列P中配置容量为60;S队列中配置容量为40。P中队列最⼩配额为50%,也就是P队列中可以同时运⾏两个作业,每个作业分配30个计算资源;S队列中最⼩配额为25%,也就是可以同时运⾏4个作业。在队列之间也会共享空闲的计算资源。容量调度算法中最重要的就是在选择作业的时候,会关注作业所属的⽤户是否已经超过了他所能使⽤的计算资源限制。
容量调度器还可以有效地对集中资源中的内存资源进⾏管理,从⽽可以有效的⽀持内存密集型作业。如果⼀个作业对内存的资源需求⽐较⾼,那么调度算法就要保证将该作业的相关任务分派到具有充⾜内存资源的TaskTacker上执⾏,已避免由于内存不⾜造成⽆法执⾏。因此,在作业选择的过程中,计算能⼒调度算法还需要检查空闲TaskTracekr上的内存资源是否能够满⾜作业的内存需求。

本文发布于:2024-09-22 07:09:44,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/284532.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调度   作业   资源   集群   队列   计算   任务   公平
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议