转自:https://m.aliyun.com/yunqi/articles/79700

背景

使用过hadoop的人基本都会考虑集群里面资源的调度和优先级的问题,假设你现在所在的公司有一个大hadoop的集群,有很多不同的业务组同时使用。但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求。那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这两个任务呢?是先执行A的任务,再执行B的任务,还是同时跑两个?

目前一些使用EMR的大公司,会使用一个比较大的集群,来共公司内部不同业务组的人共同使用,相对于使用多个小集群,使用大的集群一方面可以达到更高的最大性能,根据不同业务的峰谷情况来调度从而获得更高的资源利用里,降低总成本。另外一个方面,能够更好地在不同的业务组之间实现资源的共享和数据的流动。下面结合EMR集群,介绍一下如何进行大集群的资源quota管控。

yarn默认提供了两种调度规则,capacity scheduler和fair scheduler。现在使用比较多的是capacity scheduler。具体的实现原理和调度源码可以google一下capacity scheduler。

什么是capacity调度器

Capacity调度器说的通俗点,可以理解成一个个的资源队列。这个资源队列是用户自己去分配的。比如我大体上把整个集群分成了queue1queue2两个队列,queue1是给一个业务组使用queue2给另外一个业务组使用。如果第一个业务组下面又有两个方向,那么还可以继续分,比如专门做BI的和做实时分析的。那么队列的分配就可以参考下面的树形结构:

root
------default[20%]
------q1[60%]|---q1.q11[70%]|---q1.q12[30%]
------q2[20%]

整个集群的queue必须挂在root下面。分成三个queue:default,q1和q2。三个队列使用集群资源的quota配比为:20%,60%,20%。default这个queue是必须要存在的。

虽然有了这样的资源分配,但是并不是说提交任务到q2里面,它就只能使用20%的资源,即使剩下的80%都空闲着。它也是能够实现(通过配置),只要资源实在空闲状态,那么q2就可以使用100%的资源。但是一旦其它队列提交了任务,q2就需要在释放资源后,把资源还给其它队列,直到达到预设de配比值。粗粒度上资源是按照上面的方式进行,在每个队列的内部,还是按照FIFO的原则来分配资源的。

capacity调度器特性

capacity调度器具有以下的几个特性:

  • 层次化的队列设计,这种层次化的队列设计保证了子队列可以使用父队列设置的全部资源。这样通过层次化的管理,更容易合理分配和限制资源的使用。
    容量保证,队列上都会设置一个资源的占比,这样可以保证每个队列都不会占用整个集群的资源。
  • 安全,每个队列又严格的访问控制。用户只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。
  • 弹性分配,空闲的资源可以被分配给任何队列。当多个队列出现争用的时候,则会按照比例进行平衡。
  • 多租户租用,通过队列的容量限制,多个用户就可以共享同一个集群,同事保证每个队列分配到自己的容量,提高利用率。
  • 操作性,yarn支持动态修改调整容量、权限等的分配,可以在运行时直接修改。还提供给管理员界面,来显示当前的队列状况。管理员可以在运行时,添加一个队列;但是不能删除一个队列。管理员还可以在运行时暂停某个队列,这样可以保证当前的队列在执行过程中,集群不会接收其他的任务。如果一个队列被设置成了stopped,那么就不能向他或者子队列上提交任务了。

capacity调度器的配置

登录EMR集群master节点,编辑配置文件:
/etc/emr/hadoop-conf/capacity-scheduler.xml
这里先贴出来完整的比较复杂一点的配置,后面再详细说明:

        <?xml version="1.0" encoding="utf-8"?> <configuration> <property> <name>yarn.scheduler.capacity.maximum-applications</name> <value>10000</value> <description>Maximum number of applications that can be pending and running.</description> </property> <property> <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> <value>0.25</value> <description>Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications.</description> </property> <property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> <description>The ResourceCalculator implementation to be used to compare Resources in the scheduler. The default i.e. DefaultResourceCalculator only uses Memory while DominantResourceCalculator uses dominant-resource to compare multi-dimensional resources such as Memory, CPU etc.</description> </property> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,q1,q2</value> <description>The queues at the this level (root is the root queue).</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.queues</name> <value>q11,q12</value> <description>The queues at the this level (root is the root queue).</description> </property> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>20</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.capacity</name> <value>60</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q2.capacity</name> <value>20</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.q11.capacity</name> <value>70</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.q11.maximum-capacity</name> <value>90</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.q11.minimum-user-limit-percent</name> <value>25</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.q12.capacity</name> <value>30</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q1.q12.user-limit-factor</name> <value>0.7</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.q2.user-limit-factor</name> <value>0.4</value> <description>Default queue user limit a percentage from 0.0 to 1.0.</description> </property> <property> <name>yarn.scheduler.capacity.root.q2.maximum-capacity</name> <value>100</value> <description>The maximum capacity of the default queue.</

转载于:https://www.cnblogs.com/hark0623/p/7991015.html

利用yarn capacity scheduler在EMR集群上实现大集群的多租户的集群资源隔离和quota限制...相关推荐

  1. Hadoop - YARN NodeManager 剖析、NodeManger内部架构、分布式缓存、目录结构、状态机管理、Container 生命周期剖、资源隔离

    一 概述 NodeManager是运行在单个节点上的代理 ,它管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通信,管理Container的生命周期.监控每个Conta ...

  2. 疫情当下无法继续学画画?来美术集线上画室在家好好学美术~

    最近因为疫情的影响,造成了很多学校的停课,画室的停课,为我们的出行和生活都带来了很大的不便,很多同学也因此没法去画室学习,练习绘画,疫情当下,我们如何保证学习不止步,如何利用好这一段时间丰富自己,提升 ...

  3. YARN中的任务队列调度器-容量调度器(Capacity Scheduler)

    一.概述 容量调度器是YARN提供的三种调度器中的一种,这种调度器允许多个组织(队列)共享一个Hadoop集群,每个组织(队列)所分配的集群资源是固定的且可配置的.每个组织(队列)内部还可以进一步划分 ...

  4. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列

    前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...

  5. hadoop3 Yarn容量(Capacity Scheduler)调度器和公平(Fair Scheduler)调度器配置

    文章目录 组件模块说明 容量调度器(Capacity Scheduler) 容量调度器特点 公平调度器(Fair Scheduler) 配置容量调度器案例 例子1 例子2 例子3 例子4 配置公平调度 ...

  6. pythonspark集群模式运行_有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  7. 四十六、利用yarn多队列实现hadoop资源隔离

    2019独角兽企业重金招聘Python工程师标准>>> 大数据处理离不开Hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像 ...

  8. 大数据之Yarn——Capacity调度器概念以及配置

    试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...

  9. 小白学习Spark03-在集群上运行Spark

    03 在集群上运行Spark 3.1 Spark运行架构 3.1.1 驱动器节点 3.1.2 执行器节点 3.1.3 集群管理器 3.1.4 启动Spark程序 3.1.5 小结 3.2 使用spar ...

最新文章

  1. LeetCode简单题之杨辉三角 II
  2. 关于DEDECMS自定义模型当中添加自定义字段后在后台添加内容后不显示解决方案...
  3. SPY++ 学习总结
  4. pyspark reduce代码示例
  5. 【英语学习】【加州教材】【G4】【科学】Science目录及术语表
  6. java 蓝桥杯算法训练 未名湖边的烦恼
  7. Windows下根据进程id获得进程名
  8. oracle中正则表达式相关函数regexp_like简介
  9. [洛谷P1908] 逆序对|归并排序|树状数组
  10. [deviceone开发]-QQ分享、微信分享和新浪微博分享
  11. 上海项目危机经历与感想
  12. 强化学习在游戏中的作用_游戏中的强化学习
  13. 在Linux Mint 19.2 XFCE(x64)中安装Canon LBP2900+打印机驱动程序
  14. MapReduce经典案例总结
  15. 结束已经占用的端口号的进程
  16. JavaEE(10)Spring中的注解开发、静态/动态代理
  17. 华为ensp防火墙nat64案例配置
  18. 魔法宝石 spfa
  19. DNA存储:这些公司正在开启数据存储的未来
  20. 1个系统节拍 c语言_【菜鸡C语言】菜鸡鼓起勇气用Dev-c++打起节奏来了

热门文章

  1. python画-如何用Python画各种著名数学图案 | 附图+代码
  2. python安装教程win8-python 2.7在win8.1上安装的方法
  3. python打开是什么颜色-python图片颜色
  4. python软件怎么使用-Python快速入门—如何选择使用包管理工具?
  5. 怎么用python画简单的图-Python | 用matplotlib画些简单的图
  6. python代码示例下载-Python下载网易云歌单歌曲的示例代码
  7. excel调用python编程-如何在excel中调用python脚本
  8. python叫什么-python中什么叫类
  9. php和python学哪个-PHP Vs Python 学习哪个比较好?
  10. python安装教程32位-python为什么要装32位的