Yarn的资源隔离机制
源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。资源调度由ResourceManager完成,而资源隔离由各个NodeManager实现,在文章“Hadoop YARN中内存和CPU两种资源的调度和隔离”中,我已经介绍了YARN的内存和CPU的资源隔离,本文将介绍YARN在资源隔离方面的一些进展。
当谈及到资源时,我们通常指内存,CPU和IO三种资源。默认情况下,YARN不会对任何资源进行隔离,当然,如果采用Java语言编写的程序,则会使用JVM内置的隔离机制为内存资源进行隔离。随着YARN的逐步完善,在内存,CPU和IO三种资源隔离方面均有重大进展。
首先介绍内存资源隔离。内存资源是YARN从一开始就会管理和调度的资源,考虑到内存资源的特殊性,YARN并没有显式地对内存资源进行强制隔离,以免在产生内存抖动时,任务被不优雅地杀掉。当然,如果你采用了Java语言编写了任务,则可以使用JVM提供的内存隔离机制,这是一种不错的选择。对于YARN而言,目前所做的工作是监控每个任务的进程树,如果每个任务的进程树使用的总物理内存或者总虚拟内存量超过了预先设置值,则依次发送TERM和KILL两个信号将整个进程树杀死。如果你在YARN上运行了一些特殊的任务或者服务,希望使用Cgroups对内存进行严格的隔离,可以关注:https://issues.apache.org/jira/browse/YARN-1856
接下来介绍CPU资源隔离。CPU资源调度从Hadoop 2.2.0开始已经得到了完好的支持,但CPU资源隔离支持的很不好,目前已经完成或者正在做的工作如下;
(1)CPU资源按照百分比进行使用和隔离。通过Cgroup的cpu.shares参数实现的,这种方式能够保证每个节点上的cpu资源得到充分的共享和使用,从而产生较高的CPU利用率。从hadoop 2.2.0开始已经得到了支持,但是要启用这个功能,还需经过较为复杂的参数配置和调整,相关jira为:https://issues.apache.org/jira/browse/YARN-3
(2)限制每个container的CPU资源使用上限。上一一种CPU隔离方式能够保证每个Contaienr的CPU使用下限,大部分情况下,可能拿到比自己期望的多的CPU资源;而这种隔离则不同,它会严格限制cpu使用上限,比如你希望使用2个CPU,则会限制你只能使用2个,不能多用,即使同机器上仍有大量空闲CPU资源,也不会允许你使用。该功能是通过Cgroup的cpu.cfs_quota_us和cpu.cfs_period_us两个参数实现的,目前已经有可使用的patch,但尚未merge到主干中,具体参考:https://issues.apache.org/jira/browse/YARN-810
(3)限制yarn使用的CPU上限。实现机制与(2)相同,已有可使用的patch,具体参考:https://issues.apache.org/jira/browse/YARN-2440
需要注意的是,YARN允许你配置每个节点上可使用的物理cpu个数,以及物理cpu与虚拟cpu个比例,而用户申请资源时,只能申请虚拟cpu。默认情况下,物理cpu和虚拟cpu是1:1的,如果你的集群是异构的,某些节点上的CPU拥有更强的计算能力,则可以调整物理cpu和虚拟cpu的比例。虚拟cpu的概念是借鉴“物理内存和虚拟内存”的,主要目的是消除集群中cpu计算能力的异构性。
最后介绍IO资源。IO资源分为磁盘IO和网络IO两种。目前YARN已经在这两方面展开工作,初步的设计文档已经发布,具体可参考:https://issues.apache.org/jira/browse/YARN-2139和https://issues.apache.org/jira/browse/YARN-2140。IO资源的隔离比CPU和内存复杂的多,为了便于用户量化IO资源,YARN仿照“虚拟cpu”的概念,引入了“虚拟磁盘”(vdisk),第一阶段将尝试使用cgroup的blkio模块实现磁盘IO隔离。当然,在实现该功能之前,还需要将IO资源加入调度器管理的范畴,使得hadoop中的资源调度器,比如公平调度器或者容量调度器,可以对磁盘IO和网络IO进行调度。
Yarn的资源隔离机制的更多相关文章
- Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案
注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明. Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...
- 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统
资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是资源隔离 资源隔离是指为不同任务提供可独立使用的计算资源以 ...
- Hadoop Yarn 框架原理及运作机制及与MapReduce比较
Hadoop 和 MRv1 简单介绍 Hadoop 集群可从单一节点(其中所有 Hadoop 实体都在同一个节点上运行)扩展到数千个节点(其中的功能分散在各个节点之间,以增加并行处理活动).图 1 演 ...
- Hadoop YARN资源隔离技术
YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgr ...
- 利用yarn多队列实现hadoop资源隔离
大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...
- Impala源码之资源管理与资源隔离
本文由 网易云发布. 前言 Impala是一个MPP架构的查询系统,为了做到平台化服务,首先需要考虑就是如何做到资源隔离,多个产品之间尽可能小的甚至毫无影响.对于这种需求,最好的隔离方案无疑是物理机 ...
- hystrix完成对redis访问的资源隔离
相对来说,考虑的比较完善的一套方案,分为事前,事中,事后三个层次去思考怎么来应对缓存雪崩的场景 1.事前解决方案 发生缓存雪崩之前,事情之前,怎么去避免redis彻底挂掉 redis本身的高可用性,复 ...
- Docker 容器资源隔离 namespace(十)
目录 一.简介 Linux Namespace的6大类型 二.Mount Namespace 三.IPC Namespace 四.Network Namespace 五.UTS Namespace 六 ...
- 混部之殇-论云原生资源隔离技术之CPU隔离(一)
作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...
随机推荐
- C# oracle to_date 日期型 参数传值
C#操作oracle,date字段,使用参数传值 例子一,获取三小时前的记录 public static DataTable Query() { const string sSql = &qu ...
- sqlserver 2008 还原数据库时,提示有用户正在使用,无法取得使用占有权
sqlserver 2008 还原数据库时,提示有用户正在使用,无法取得使用占有权 这个时候,只需要把数据库分离出去,再附加,然后还原即可 分离数据库的时候能看到有几个数据连接
- iOS.NS_DEPRECATED_IOS
如何处理被NS_DEPRECATED_IOS标记的selector, 例如:类 AVAudioSession中有: - (BOOL)setPreferredHardwareSampleRate:(do ...
- 基于TCP的socket套接字的网络编程(客户端/服务端模式)
于数据完整性要求较高的场合,就应采用TCP协议. IP网络层提供IP寻址和路由.因为在网络上数据可以经由多条线路到达目的地,网络层负责找出最佳的传输线路. IP地址与数据包: IP层就是把数据分组从一 ...
- node.js 关于 async的使用
第一次使用,感觉有点糊涂,后来实验明白了. 在串行执行中,经常会只做了第一步.后来明白了.是没有把回调函数放在里面简单就是: async.series( { ...
- python 找出一篇文章中出现次数最多的10个单词
#!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...
- python range用法
1. range(n) 相当于枚举 从0<=i<n的整数 增量为1 for i in range(4): print(i) 结果:0 1 2 3 2. range(5,10) 相当于枚举 ...
- WCF路由服务
代码下载: 链接:https://pan.baidu.com/s/1i76Ht0lMWmosaCrDjaA2cA 密码:muj11.新建类库 Service.Interface using Syste ...
- APICloud开发
2018-06-16 今天在看房角石APPIOS版本闪退的问题,后来定位到了 elements.find("video").attr("preload", &q ...
- Vue修饰符
为了方便大家写代码,vue.js给大家提供了很多方便的修饰符,比如我们经常用到的取消冒泡,阻止默认事件等等~ 目录 表单修饰符 事件修饰符 鼠标按键修饰符 键值修饰符 v-bind修饰符(实在不知道叫 ...