热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yarn资源调度器入门学习

调度器scheduler是yarn中重要角色之一,它负责分配

调度器scheduler是yarn中重要角色之一,它负责分配container资源给application,有如下三种调度器可供配置选择,分别是FIFO Scheduler,Capacity Scheduler和Fair Scheduler,可以通过yarn-site.xml配置自己的调度器。

FIFO Scheduler

FIFO调度器使比较low的一种调度器,它遵循先进先出的原则,即一个queue中application先进先出,这种对资源使用的策略是队列中哪个application先拿到了资源,则其需先执行完后释放container资源才能执行队列中下一个application。FIFO Scheduler调度器模式下,一个job提交后抢占到的资源将占据到100%,队列中其他job由于没有多余资源可用只能等待,因此如果一个队列中有一个执行时间很长但不紧急的job和许多执行时间短但紧急的job,则会出现问题。执行时间长的job如果先执行会一直占用资源,而小job只能等待。另外,FIFO Scheduler不需要配置可以直接拿来用。

1486105-20191007194155058-1582173832.png

Capacity Scheduler

Apache下的Hadoop调度器默认采用的就是Capacity Scheduler,它对资源的使用不仅仅只有一个队列,一般会给一个执行时间长的application分配一个队列(如图queue A),给执行时间短的application也分配一个队列(如图queue B)。这样的话执行时间长的job和短的job都可以获取container资源执行,如提交job1会立马执行,只占据它所拥有的那一部分container资源,当job2提交后也会获取它的一部分资源执行,这样做的缺点是执行时间长的job会占用相对少的资源,从而比FIFO Scheduler情况下会执行更多的时间来完成任务。另外使用Capacity Scheduler是在etc/hadoop/yarn-site.xml文件中配置的,配置具体信息需在etc/hadoop/Capacity-scheduler.xml中完成,如配置队列A和B、各自权重、队列可以上浮的最大资源占比均是在xml文件中完成。

1486105-20191007194210414-75599716.png

root是顶级队列,下面可以配置量产(prod)和开发(dev)队列,开发队列中又可以继续拆分A和B队列,队列存在层级关系。

root
├── prod
└── dev
├── A
└── B

以下是配置capacity-scheduler.xml示例。





yarn.scheduler.capacity.root.queues
prod,dev



yarn.scheduler.capacity.root.dev.queues
A,B



yarn.scheduler.capacity.root.prod.capacity
40



yarn.scheduler.capacity.root.dev.capacity
60



yarn.scheduler.capacity.root.dev.maximum-capacity
75



yarn.scheduler.capacity.root.dev.A.capacity
50



yarn.scheduler.capacity.root.dev.B.capacity
50

队列配置完成后如果想让application指派到这个对列中执行,可以在代码中进行配置,注意后面队列名不是全局名,就是队列层级中最后的名字即可,如果配置全局名会报错。

configuration.set("mapreduce.job.queuename","A");

Fair Scheduler

最后一种是Fair Scheduler,也称作公平调度器,这种调度器相对前两个调度器总体来说可以更大的利用资源,即面向整体的job,它是资源利用最好的。如下图所示当job1提交后,发现队列中没有其他application,它会占用总个队列资源开始执行,当job2提交后需要资源,此时队列会分一半的资源给job2,但是不会立马给它,还需要job1释放一半的资源后,job2得到资源才能运行任务,这里有一个等待时间,它是可以设置的,超过等待时间如果job1依然没有释放资源则会抢占资源。当job2执行完后释放资源,job1又会占用队列全部的资源继续执行,这种模式看上去就是充分的利用了资源同时又让任务不会长时间等待资源。Hadoop分布式项目CDH默认会使用Fair Scheduler,其他的如果使用它可以配置yarn-site.xml来完成,将yarn.resourcemanager.scheduler.class设置为公平调度器的完全限定名org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。

1486105-20191007194231067-1028757450.png

公平调度器具体细节的配置也有一个文件,其在fair-scheduler.xml中完成,参考上面capacity-scheduler的层级关系,也可以在公平调度器实现。




fair


40


60

A
B

上面说的抢占资源,也是可以设置的,通过将yarn-site.xml的yarn.scheduler.fair.preemption属性设置为true就全面启动抢占功能,即允许调度器终止job1占用的的本来属于job2的资源,job1被中止的任务需要重新执行,某种意义上来说这样会降低整个集群的任务执行效率。

参考博文:
(1)《hadoop核心权威指南第四版》

转载于:https://www.cnblogs.com/youngchaolin/p/11631892.html


推荐阅读
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
author-avatar
金子祺_475
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有