hadoop-yarn、内核资源隔离

栏目: 编程工具 · 发布时间: 5年前

内容简介:整体:yarn是hadoop的资源隔离运行在YARN上带来的好处 :

整体: https://segmentfault.com/a/11...

yarn是hadoop的资源隔离

运行在YARN上带来的好处 :

一个集群部署多个版本
计算资源按需伸缩
不同负载应用混搭,集群利用率高
共享底层存储,避免数据跨集群迁移

hadoop-yarn、内核资源隔离

1.到RM申请,在一个Container中启动AM

包含异步的分配资源,暂存在缓冲区,等待AM来取

2.AM RPC取资源并与NM通信

AM领取资源后分配任务不是yarn事情,用户自行实现

3.包含各种状态同步,比如7,持续的nm到rm.

隔离算法

目前只能实现cpu和内存的隔离

1.可以占用空闲资源 Capacity Scheduler

2.平均分配 Fair Scheduler

基于cgroups

linux/kernel/cgroup,包含子系统:cpu,io,mmemory,net等

hadoop-yarn、内核资源隔离

内核中的代码在kennel下。

用户使用:通过文件系统配置(内核给用户提供的方法)

VFS 文件:ext2,ext3磁盘,socket,cgroups 。操作系统实现后可以通过mount挂载到cgroups文件系统

vi /etc/cgconfig.conf。/sys/fs/cgroup/cpuset中配置即可

对于内存并没有直接用cgroups

内存隔离:线程监控进程内存量,不是超过立刻杀死,有个生命期

  1. jvm不足以:每个任务不仅有 java 进程,reduce用C++
  2. 不能单纯的cgroups内存树直接配置
    Linux中所有的进程都是通过fork()复制来实现的,而为了减少创建进程带来的堆栈消耗和性能影响,Linux使用了写时复制机制来快速创建进程。也就是说,一个子进程刚刚产生时,它的堆栈空间和父进程是完全一致的,那么从一开始它就拥有和父进程同样的ru_maxrss,如果父进程的ru_maxrss比较大,那么由于rusage计算值取最大值,就算在触发写时复制后,子进程使用的实际最大驻留集大小被更新,我们获得的也还是父进程的那个值,也就是说我们永远拿不到子进程真实使用的内存。
    Java创建子进程时采用了“fork() + exec()”的方案,子进程启动瞬间,它的内存使用量与父进程是一致的,exec系函数,这个系别的函数通过将当前进程的使用权转交给另一个程序,这时候进程原有的所有运行堆栈等数据将全部被销毁,因此ru_maxrss也会被清零计算,然后子进程的内存会恢复正常;也就是说,Container(子进程)的创建过程中可能会出现内存使用量超过预先定义的上限值的情况(取决于父进程,也就是NodeManager的内存使用量);此时,如果使用Cgroup进行内存资源隔离,这个Container就可能会被“kill”。
    虽然我们已经可以获得各个Container进程树的内存(物理内存、虚拟内存)使用量,但是我们不能仅凭进程树的内存使用量(物理内存、虚拟内存)是否超过上限值就决定是否“杀死”一个Container,因为“子进程”的内存使用量是有“波动”的,为了避免“误杀”的情况出现,Hadoop赋予每个进程“年龄”属性,并规定刚启动进程的年龄是1,MonitoringThread线程每更新一次,各个进程的年龄加一,在此基础上,选择被“杀死”的Container的标准如下:如果一个Contaier对应的进程树中所有进程(年龄大于0)总内存(物理内存或虚拟内存)使用量超过上限值的两倍;或者所有年龄大于1的进程总内存(物理内存或虚拟内存)使用量超过上限值,则认为该Container使用内存超量,可以被“杀死”。(注意:这里的Container泛指Container进程树)
    fork/exec/线程/进程在另一篇:xx

k8s

基本上完全基于cgroups。但是对于内存/磁盘这种没有就不行的不可压缩资源,会再加一个阈值,防止不稳定,能分配的会少于这个。所以k8s对于内存的限制会在fork时误放大没有处理。

https://juejin.im/post/5b3d8c...

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Algorithms

Python Algorithms

Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99

Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码