hadoop调度器的原理和应用场景解析

前置篇:

为从根本上解决旧 MapReduce 框架的性能瓶颈,促进 Hadoop 框架的更长远发展,从 0.23.0 版本开始,Hadoop 的 计算框架完全重构,发生了根本的变化。新的 Hadoop MapReduce 框架命名为 Yarn,重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是计算资源管理和任务调度 / 监控。ResourceManager
全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调, 结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。

以下是对每个部件职责的更详细解释。

ResourceManager:基于应用程序对资源的需求进行调度 ,每一个应用程序需要不同类型的资源因此就需要不同的容器。资源包括:内存,CPU,磁盘,网络等等。资源管理器提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。调度插件可以基于现有的能力调度和公平调度模型。

NodeManager:是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。

ApplicationMaster:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。用户每提交一个应用程序都会为之创建一个ApplicationMaster。ApplicationMaster取决于用户提交的应用程序的数量。首先应用程序会提交给ResourceManager,然后ResourceManager为这个应用程序创建了一个ApplicationMaster。后面的资源分配以及任务执行都是围绕ApplicationMaster进行的。

正文篇:

接下来就一起研究一下包括FIFO调度器、Capacity调度器、Fair调度器在内的三个调度器。

一、FIFO调度器(先进先出调度)

上图为FIFO调度器的执行过程示意图。
FIFO Scheduler是最简单也是最容易理解的调度器,它缺点是不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。从执行过程图中可以看出,在FIFO 调度器中,小任务会被大任务阻塞。

二、Capacity调度器(容量预先分配调度)

上图为Capacity调度器的执行过程示意图。
而对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。

三、Fair调度器(公平分配调度)

上图为Fair调度器的执行过程示意图。
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如下图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
需要注意的是,在Fair调度器图中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。

原文地址:https://blog.51cto.com/13665344/2413647

时间: 2024-10-07 04:25:54

hadoop调度器的原理和应用场景解析的相关文章

Hadoop 调度器

调度算法?当MapReduce有很多的作用执行的时候,那么他是按照什么样的顺序让作业去执行呢? 那么在设定顺序的时候需要关注那些问题呢? 1.作业的吞吐量 2.优先级别 默认的调度算法:FifoScheduler,只有一个队列. CapacityScheduler和FairSecheduler:多队列 公平调度器 容量调度器,多队列的

Hadoop的调度器总结

Hadoop的调度器总结 随着MapReduce的流行,其开源实现Hadoop也变得越来越受推崇.在Hadoop系统中,有一个组件非常重要,那就是调度器,它的作用是将系统中空闲的资源按一定策略分配给作业.在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器.Hadoop中常见的调度器有三种,分别为: (1)默认的调度器FIFO Hadoop中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业. (2) 计算能力调度器Capacity Sc

Hadoop 三大调度器分析

如要转载,请注上作者和出处. 须知: 我们下载的是hadoop-2.7.3-src 源码. 这个版本默认调度器是Capacity调度器. 在2.0.2-alpha版本的时候,有人汇报了一个fifo调度器的bug,社区把默认调度器从原来的fifo切换成capacity了. 在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器,然后在配置文件中指定相应的调度器,这样,当Hadoop集群启动时,便会加载该调度器.当前Hadoop自带了几种调度器,分别是FIFO(默认调度

深入Hadoop的调度器

Hadoop有两个大版本 0.20.x,1.x通常为hadoop 1版本,运行环境依赖JobTracker和TaskTracker,运行资源通过作业表示模型MapTask和ReduceTask来组成:运行资源通过槽位Slot来表示. 0.23.x,2.x称之为hadoop 2版本,在开发模型上类似1,都有新旧两套MapReduce API来完成;针对JobTracker的职责有YARN来管理:包括 a:资源管理 ResourceManager ,以及NodeManager b:作业调度 Appl

Hadoop之MapReduce工作原理

Hadoop由两部分组成,分别是分布式文件系统HDFS和分布式计算框架MapReduce.其中,分布式文件系统HDFS主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统上,对于存储在分布式文件系统的数据进行分布式计算. 1  MapReduce设计目标 HadoopMapReduce诞生于搜索领域,主要解决搜索引擎面临的海量数据处理扩展性差的问题.它的实现很大程度上借鉴了Google MapReduce的设计思想,包括简化编程接口.提高系统容错性等.总结HadoopMap

工作流调度器azkaban概述

一.概述 1. 为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等; 各任务单元之间存在时间先后及前后依赖关系; 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行: 例如: 我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: 1.通过Hadoop先将原始数据同步到HDFS上: 2.借助MapReduce计算框架对原始数据进行

CFS 调度器

CFS调度器的原理明白了但是有个地方,搜遍了整个网络也没找到一个合理的解释: if (delta > ideal_runtime) resched_task(rq_of(cfs_rq)->curr); 这出代码是在patch:f685ceaca sched: Strengthen buddies and mitigate buddy induced latencies patch中描述和是LAST_BUDDY 和 wakeup preemption相关 buddy是什么意思?是调度队列中的而一

Hadoop-2.2.0中文文档—— MapReduce 下一代 -- 公平调度器

目的 此文档描述了 FairScheduler, Hadoop 的一个可插入式的调度器,允许 YARN 应用在一个大集群中公平地共享资源. 简介 公平调度是一种分配资源给应用的方法,以致到最后,平均上所有应用获得相等的资源.  Hadoop NextGen 能够调度多种类型的资源.默认的, Fair Scheduler 仅以内存为基础作公平调度决策.可以用Ghodsi 等开发的 Dominant Resource Fairness 概念配置调度内存和CPU.仅有一个应用运行时,这个应用使用整个集

Quartz与Spring集成——启动调度器

前言 在<Quartz与Spring集成--创建调度器>一文中介绍了调度器的创建过程,本文将分析其启动过程.熟悉Spring原理的人都知道AbstractApplicationContext的refresh方法的重要性,在refresh方法中调用了finishRefresh方法,最后会调用到SchedulerFactoryBean的start方法,其调用栈如图1所示. 图1 SchedulerFactoryBean的start方法的调用栈 根据图1的内容,我们知道spring容器初始化完毕的最