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/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...
随机推荐
- Android——图片视图(ImageView)、状态开关按钮(ToggleButton)、时钟、图片透明度、滚动和时间选择器
activity_ui1.xml dth="wrap_content" android:layout_height="wrap_content" android ...
- BZOJ1227或洛谷2154 [SDOI2009]虔诚的墓主人
BZOJ原题链接 洛谷原题链接 又是扫描线,题解可看大佬的博客(太懒了不想打) #include<cstdio> #include<algorithm> using names ...
- BUG(1):一个关于指针的bug
是时候记录一下这个让我栽了两次的bug了. 具体情况如下: #include <stdio.h>#include <stdlib.h> struct app_info_t { ...
- html中 和空格的区别
Non-Breaking Space 注意是 这6个字符是一个整体, 在html中, 是空格的占位符.一个 代表一个空格:两个 代表两个空格,即使用几个 就显示几个空格. 但是普通的空格在h ...
- python 部分数据处理代码
# -*- coding:utf8 -*- import os import jieba.posseg as pseg # -*- coding:utf8 -*- import os def spl ...
- python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)
不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...
- 再读c++primer plus 003
1.如果函数返回一个结构而不是一个指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup.但在返回值为引用时,将直接复制给变量,其效率更高. 2.返回引用时最重要的一点是,应避免返回 ...
- Django的学习(一)————初入django
一.基本指令 1.项目的建立: Django的项目建立,进入目录,打开cmd输入 django-admin startproject[项目名称],注意如果是在其他文件下把项目设计成资源文件. 2.Ap ...
- Python开课复习9-28
一.什么是迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 举例: l=[1,2,3] count=0 while co ...
- thinkphp5 数据库和模型
1.Db和模型的存在只是ThinkPHP5.0架构设计中的职责和定位不同,Db负责的只是数据(表)访问,模型负责的是业务数据和业务逻辑.2.Db和模型最明显的一个区别就是Db查询返回的数据类型为数组( ...