简述YARN中内存和CPU资源隔离机制 面试版

资源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。

    资源调度:由resourcemanager完成

    资源隔离:各个nodemanager完成

 

对于CPU而言,它是一种“弹性”资源,使用量大小不会直接影响到应用程序的存亡,因此CPU的资源隔离方案采用了Linux Kernel提供的轻量级资源隔离技术Cgroup。

YARN 中CPU被划分成虚拟CPU(CPU virtual Core),初衷是,考虑到不同节点的CPU性能可能不同,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。

 

对于内存资源,它是一种限制性资源,它的量的大小直接决定的应用程序的生死。为了能够更灵活地控制内存使用量,YARN提供了两种可选方案:线程监控方案基于轻量级资源隔离技术Cgroups的方案。默认情况下,YARN采用了进程监控的方案控制内存使用。

进程监控的方案

首先可计算当前每个运行的Container使用的内存总量。但需要注意的是,不能仅凭该内存量是否超过设定的内存最高值来决定是否杀死一个Container。在创建一个子进程时,JVM采用了"fork()+exec()"模型,这意味着进程创建之后、执行之前会复制一份父进程内存空间,进而使得进程树在某一小段时间内存使用量翻倍。

为了避免误杀Container,Hadoop赋予每个进程“年龄”属性,并规定刚启动进程的年龄是1,且MonitoringThread线程每更新一次,各个进程年龄加一,在此基础上,选择被杀死Container的标准如下:

  1. 如果一个Container对应的进程树中所有进程(年龄大于0)总内存超过(用户设置的)最大值的两倍。
  2. 或者所有年龄大于1的进程总内存量超过(用户设置的)最大值。

则认为该Container过量使用内存,则向Container发送ContainerEventType.KILL_CONTAINER事件将其杀死。

Cgroups

Cgroup会严格限制应用程序的内存使用上限,一旦使用量超过预先定义的上限值,就会将该应用程序“杀死”,因此无法有效地使用Cgroup进行内存资源隔离。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值