源调度和资源隔离是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-2139https://issues.apache.org/jira/browse/YARN-2140。IO资源的隔离比CPU和内存复杂的多,为了便于用户量化IO资源,YARN仿照“虚拟cpu”的概念,引入了“虚拟磁盘”(vdisk),第一阶段将尝试使用cgroup的blkio模块实现磁盘IO隔离。当然,在实现该功能之前,还需要将IO资源加入调度器管理的范畴,使得hadoop中的资源调度器,比如公平调度器或者容量调度器,可以对磁盘IO和网络IO进行调度。

Yarn的资源隔离机制的更多相关文章

  1. Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案

    注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明.   Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...

  2. 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统

    资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是资源隔离 资源隔离是指为不同任务提供可独立使用的计算资源以 ...

  3. Hadoop Yarn 框架原理及运作机制及与MapReduce比较

    Hadoop 和 MRv1 简单介绍 Hadoop 集群可从单一节点(其中所有 Hadoop 实体都在同一个节点上运行)扩展到数千个节点(其中的功能分散在各个节点之间,以增加并行处理活动).图 1 演 ...

  4. Hadoop YARN资源隔离技术

    YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgr ...

  5. 利用yarn多队列实现hadoop资源隔离

    大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...

  6. Impala源码之资源管理与资源隔离

    本文由  网易云发布. 前言 Impala是一个MPP架构的查询系统,为了做到平台化服务,首先需要考虑就是如何做到资源隔离,多个产品之间尽可能小的甚至毫无影响.对于这种需求,最好的隔离方案无疑是物理机 ...

  7. hystrix完成对redis访问的资源隔离

    相对来说,考虑的比较完善的一套方案,分为事前,事中,事后三个层次去思考怎么来应对缓存雪崩的场景 1.事前解决方案 发生缓存雪崩之前,事情之前,怎么去避免redis彻底挂掉 redis本身的高可用性,复 ...

  8. Docker 容器资源隔离 namespace(十)

    目录 一.简介 Linux Namespace的6大类型 二.Mount Namespace 三.IPC Namespace 四.Network Namespace 五.UTS Namespace 六 ...

  9. 混部之殇-论云原生资源隔离技术之CPU隔离(一)

    作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...

随机推荐

  1. android使用Pull解析来自服务器的xml文件时出现错误以及解决方案

    直接上代码,代码中有详细注释: 1 public class CheckUpdateManager { 2 private static final String TAG = "CheckU ...

  2. Python 环境安装教程(Windows 10)

    Python编程语言非常强大,非常容易上手,版本更新也不慢,在win10 x64中兼容性也很好,直接安装不需另外配置,虽然Python2和3有点异同.学习的话选择最新的 python 3.7.1版. ...

  3. CentOS 7安装配置Samba服务器

    CentOS 7安装配置Samba服务器 CentOS 7下Samba服务器安装配置过程笔记. 假设我们有这样一个场景 共享名 路径 权限 SHAREDOC /smb/docs 所有人员包括来宾均可以 ...

  4. c++11 stl 学习之 shared_ptr

    shared_ptr智能指针 shared_ptr 的声明初始化方式由于指针指针使用explicit参数 必须显示声明初始化shared_ptr<string> pNico = new s ...

  5. 记录点复习题目和linux学习

    哈希怎么底层.key放数组哪部分里面 HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体. 开网页怎么获取页面 linux 看进程的cpu 和内存占用率 看哪个端口被占用     ...

  6. windows 下设置nginx负载均衡

    #user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...

  7. java基本例子

    文件结构 D:\jp\jarDemo\IAmMainClass.java import iAmPackage.*; public class IAmMainClass { public static ...

  8. nginx设置代理配置

    server {                 listen  8086;                 resolver 8.8.8.8;                 location /{ ...

  9. 爬虫模块之解决IO

    一 asyncio模块 asyncio模块:主要是帮我们检测IO(只能是网路IO). @asyncio.coroutine:装饰器 tasks:任务列表 get_event_loop:起任务 run_ ...

  10. centos7 lvm实例

    1.lvm安装 rpm -qa|grep lvm lvm version yum install -y lvm2* 2.磁盘分区 fdisk -l fdisk /dev/xvdb1 #分区结束标记 t ...