yarn中的cgroup调度_隔壁老杨hongs的博客-程序员秘密

技术标签: HADOOP  yarn cgroup  cgroup  yarn调度  

cgroup控制cpu,/proc/mounts下有一个/sys/fs/cgroup/cpu配置路径,此部分是cgroup用来控制cpu隔离的路径配置。
在/sys/fs/cgroup/cpu下添加子路径hadoop-yarn,这个路径是yarn用来控制cpu的隔离的根路径
   通过yarn.nodemanager.linux-container-executor.cgroups.hierarchy配置。
每一个container启动时根据container的名称在根路径下创建子路径来控制这个container的cpu资源

yarn的cgroup控制:
  cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。
  这里的 cfs 是完全公平调度器的缩写。
  cpu.cfs_period_us 就是时间周期(每个cpu core),默认为 1000000,即1秒。
  cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。
  cpu.cfs_quota_us 的值在单core的情况下小于或等于cpu.cfs_period_us的值,在多core的情况下大于这个值。

  配置项:yarn.nodemanager.resource.percentage-physical-cpu-limit,默认值100,表示不显示cpu资源。
    这个配置用于限制yarn对当前的nodemanager的物理内存的使用百分比,通过这个配置与cpu的逻辑core进行乘法,得到可用的cpu的core.

  如果配置有对cpu使用的阀值时,对yarn的根路径的cgroup的控制:
    按1000*1000微秒为cpu的调度周期除以cpu的可用的core的个数,
      得到yarn的根路径的cpu.cfs_period_us的值,这是每个core的cpu调度周期(最小调度周期为1000微秒)。
      cpu.cfs_period_us与cpu.cfs_quota_us值的计算:
        在yarn中按1000*1000微秒来划分一次cpu的时间片调度周期.
        =>如果可使用的cpu core的个数小于1 core,这个时候cpu.cfs_period_us的值必须大于cpu.cfs_quota_us的值
          cpu.cfs_period_us的值为1000*1000微秒
          cpu.cfs_quota_us的值为(1000*1000微秒)/可用的cpu core的个数,如果这个值小于1000,设置这个值为1000
        =>如果可使用的cpu core的个数大于或等于1 core时,
          cpu.cfs_period_us的值是一个小于或等于cpu.cfs_quota_us的值,由(1000*1000微秒)/可用的cpu core的个数得到
          cpu.cfs_quota_us的值为1000*1000微秒
          如果计算出来cpu.cfs_period_us的值小于1000微秒时,设置cpu.cfs_period_us的值为1000,同时设置cpu.cfs_quota_us的值为-1
        =>最后说下:
          如果cpu core是10时,那么每个cpu core的period_us的周期为100ms,quota_us是1s,
            也就是说这个任务可以在每个cpu core中跑100ms的时间周期

 
  yarn中cgroup针对每个container的cpu控制:
    cpu.shares=>用于分配cpu执行的权重,按1024*container的vcore的个数来得到cpu的执行权重
                如:一个container分配2core,一个conainer分配3core,那么他们的执行权重为2:3
    cpu.cfs_period_us与cpu.cfs_quota_us的值,默认使用根路径的值.
       =>如果yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage配置为true时,默认为false.
             这个配置用于控制是否根据nodemanager配置的vcore来计算container分配的vcore的实际可使用cpu core.
         (实际可用的cpu core的个数)=计算(container分配的vcore的个数*可用的cpu的core的个数)/nm配置的vcore的个数
             nm配置vcore的配置项:yarn.nodemanager.resource.cpu-vcores,默认值8(可根据实际情况来进行分配).
       
      
         cpu.cfs_period_us与cpu.cfs_quota_us的计算公式
           =>(实际可用的cpu core的个数)小于1 core:
             cpu.cfs_period_us的值为1000*1000微秒
             cpu.cfs_quota_us的值为(1000*1000微秒)/(实际可用的cpu core的个数),如果这个值小于1000,设置这个值为1000
           =>(实际可用的cpu core的个数)大于或等于1 core:
             cpu.cfs_period_us的值是一个小于或等于cpu.cfs_quota_us的值,由(1000*1000微秒)/(实际可用的cpu core的个数)
             cpu.cfs_quota_us的值为1000*1000微秒
             =>如果计算出来cpu.cfs_period_us的值小于1000微秒时:
              设置cpu.cfs_period_us的值为1000,同时设置cpu.cfs_quota_us的值为-1
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014393917/article/details/52621542

智能推荐

anaconda中conda和pip对包的管理有什么区别_kan2016的博客-程序员秘密

测试环境系统:mac os 10.15.2anaconda版本: 3.71.相同点:在anaconda中,conda和pip安装的包,都是python环境的一部分,安装在同一路径,项目对于包的使用是没有区别的。2.不同点:(1)conda下载的包conda和pip都可以更新和卸载,下图为已经被pip成功卸载,列表中没有tensorflow了(2)pip下载的...

SQL Server 驱动__Zephyrus_的博客-程序员秘密

https://sourceforge.net/projects/jtds/

7-2 一元多项式的乘法与加法运算 (20 分)_Beworth1207的博客-程序员秘密

#include <cstdio>#include <cstdlib>// 多项式相乘 相加// 数据结构设计typedef struct PolyNode *Polynomial;struct PolyNode{ int coef; int expon; Polynomial link;}; P...

tensorboard启动错误:AttributeError: module 'tensorboard.util' has no attribute 'Retrier'_lordyoung的博客-程序员秘密

将tensorflow转为gpu版本后,无法启动Tensorboard。查了网上的各种方案,都是说要重新安装,于是重新安装了tensorflow-gpu 1.4,还是一样的错误。查看了现有版本分别是tensorflow-gpu1.4和tensorboard1.13.1,猜测可能是版本不对应的问题,经过尝试不同版本,发现1.6正适合。先卸载,pip uninstall tensorboa...

(一)Dubbo快速入门、介绍、使用_dubbo.protocol.name_醋酸菌HaC的博客-程序员秘密

1、介绍Dubbo官方文档:https://dubbo.apache.org/zh目前Dubbo最新的是Dubbo3。Dubbo3 格式的 Provider 地址不能被 Dubbo2 的 Consumer 识别到,反之 Dubbo2 的消费者也不能订阅到 Dubbo3 Provider。这里的架构和使用都是基于Dubbo2.7 版本,Dubbo2(2.7以下)和Dubbo3两个版本的注解有区别。Registry是注册中心,用于发现服务者和消费者。注册中心可以选择 zookeeper、con

java的前端_黄金龙666的博客-程序员秘密

htmlHTML(Hyper Text Markup Language)超文本标记语言,是做网站页面的最基础的开发语言。它的功能很弱,连脚本语言都算不上,但它小而美,网站开发它却是霸主。csscss样式即css层叠样式表(级联样式表),主要用于设置html页面中的文本内容(字体 ,大小 , 对齐方式等) 图片的外形(宽高 , 边框样式 , 边距) 以及版面的布局等外观显示样式;css是以html为基础 , 提供了丰富的功能 , 如字体 , 颜色 , 背景 , 的控制及整体排版等, 而且还可以针对不同

随便推点

将Matplotlib嵌入GUI界面中_月夕花晨KaCa的博客-程序员秘密

1.将Matplotlib嵌入wxPython的GUI界面中# -*- coding: utf-8 -*-import wximport numpy as npimport matplotlib# matplotlib采用WXAgg为后台,将matplotlib嵌入wxPython中matplotlib.use("WXAgg")from matplotlib.backend...

C语言I博客作业10_计科2班 文姣妍的博客-程序员秘密

这个作业属于哪个课程https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321这个作业要求在哪里https://bbs.csdn.net/topics/603797785这个作业的目标<你理解的作业目标具体内容>学号20218547C语言I博客作业101.PTA作业:1.1(求一批整数中出现最多的个位数字)给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字...

ROS 2 Dashing Diademata安装和使用文档(含Linux、Windows和OS X)_zhangrelay的博客-程序员秘密

全部ROS 2课程参考资料下载链接:https://download.csdn.net/download/zhangrelay/11751608在win10安装和使用ROS 2 Dashing:https://blog.csdn.net/ZhangRelay/article/details/101685013目前,ROS 2最常见的三个版本(期待国产“ROS”早日普及):ROS 2 ...

Shell脚本中的$()和``及eval_shell脚本中的``中有$_小魏同学i的博客-程序员秘密

1. ``和$()有什么区别?在shell脚本中,``和$()是用来完成命令替换的,先执行反引号或括号里面的内容,将结果代换到当前命令。 例如: 区别:对于转义字符的处理有些不同 ``中的转义没有成功,$()中\将$转义成普通字符``中两个\\将$转义成了普通字符,$()中\\的输出结果是\,和一般的转义结果一样$()中的转义字符和我们平时使用的是一样的,``中...

mac安静执行脚本_Mac下Shell脚本使用_呦鱼儿的博客-程序员秘密

【原创博文,转载请注明出处!】准备学习下Shell命令,俗话说“好记性不如烂笔头”,做点笔记方便以后查找。详细学习途径请移步 --> Shell菜鸟教程(一) Shell环境Shell常识脑补① Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。② Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过...

Mysql存储引擎MyISAM和InnoDB_Ryan_Tang️的博客-程序员秘密

Mysql索引数据结构–B+TreeB+ Tree是在B Tree 的基础上做的优化,变化如下:1、B+ Tree每个节点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低数的高度,第二个是为了将数据范围化为多个区间,区间越多,索引越快2、非叶子节点储存Key,叶子节点存储key和数据3、叶子节点两两指针相互连接(符合磁盘的预读特性),顺序查询性能更高MyISAMMyISAM是MySQL默认的存储引擎。MyISAM不⽀持事务、也不⽀持外键,其优势是访问的速度快,对事务完整性没有要求或者

推荐文章

热门文章

相关标签