在使用hadoop进行离线大数据处理的时候,集群规模比较下,内存受到限制,由于要跑MR,因此Mapper和Reducer的数量直接决定程序的执行,由于默认情况下 一个bolck块对应一个Mapper,一个Mapper需要向ResourceManager申请执行的资源,ResourceManager进行资源分配而NodeManager负责资源的供给和隔离,由于执行的文件特别大,因此启动了很多的Mapper导致申请资源启动Constainer比较多,需要很多内存,另外文件需要加载内存运算,因此在执行过程中出现了OOM

网上收集了一些关于YARN中内存资源的调度和隔离,通过优化会有一定的帮助

Hadoop  YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍YARN是如何对这些资源进行调度和隔离的。
在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。

【YARN中内存资源的调度和隔离】
基于以上考虑,YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:
(1)yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
(2)yarn.nodemanager.vmem-pmem-ratio
任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1。
(3) yarn.nodemanager.pmem-check-enabled
是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
(4) yarn.nodemanager.vmem-check-enabled
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
(5)yarn.scheduler.minimum-allocation-mb
单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。
(6)yarn.scheduler.maximum-allocation-mb
单个任务可申请的最多物理内存量,默认是8192(MB)。
默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制。
【YARN中CPU资源的调度和隔离】
在YARN中,CPU资源的组织方式仍在探索中,目前(2.2.0版本)只是一个初步的,非常粗粒度的实现方式,更细粒度的CPU划分方式已经提出来了,正在完善和实现中。
目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。在YARN中,CPU相关配置参数如下:
(1)yarn.nodemanager.resource.cpu-vcores
表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。
(2) yarn.scheduler.minimum-allocation-vcores
单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
(3)yarn.scheduler.maximum-allocation-vcores
单个任务可申请的最多虚拟CPU个数,默认是32。
默认情况下,YARN是不会对CPU资源进行调度的
默认情况下,NodeManager不会对CPU资源进行任何隔离,你可以通过启用Cgroups让你支持CPU隔离。
由于CPU资源的独特性,目前这种CPU分配方式仍然是粗粒度的。举个例子,很多任务可能是IO密集型的,消耗的CPU资源非常少,如果此时你为它分配一个CPU,则是一种严重浪费,你完全可以让他与其他几个任务公用一个CPU,也就是说,我们需要支持更粒度的CPU表达方式。

关于影响NodeManager执行MR任务constainer数量的设置问题相关推荐

  1. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)...

    本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...

  2. sql server 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    1. 问题所在:变量是在存储过程里面定义的.值在存储过程的语句执行的过程中得到,所以对这种本地变量,SQL在编译的时候不知道它的值是多少.2. SQL在处理存储过程的时候,为了节省编译时间,是一次编译 ...

  3. 文件共享服务器连接数问题,共享服务器上连接数量的设置

    共享服务器上连接数量的设置 内容精选 换一换 场景描述每个虚拟私有云VPC代表一个私有网络,与其他VPC逻辑隔离,您可以将业务系统部署在华为云上,构建云上私有网络环境.如果您有多个业务系统例如生产环境 ...

  4. 进程P1、P2、P3、P4和P5的前趋图如下图所示。若用PV操作控制进程P1~P5并发执行的过程,则需要设置6个信号S1、S2、S3、S4,且信号量S1~S4的初值都等于0。下图中a和b处应分别填写(

    进程P1.P2.P3.P4和P5的前趋图如下图所示.若用PV操作控制进程P1-P5并发执行的过程,则需要设置6个信号S1.S2.S3.S4,且信号量S1-S4的初值都等于0.下图中a和b处应分别填写( ...

  5. gridview 不 执行更新 事件 与验证有关 设置 CausesValidation=False

    gridview 不 执行更新 事件 与验证有关 设置  CausesValidation="False"

  6. Oracle AWR 阙值影响历史执行计划

    最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值并非捕获所有的sql语句,所以无法看到某些sql历史 ...

  7. python 消息框但不影响程序执行_还在用print()查找错误?日志消息不香嘛?| 原力计划...

    作者 | 灰小猿 责编 | 王晓曼 出品 | CSDN博客 最近在做项目开发的时候,跟小伙伴聊到修 Bug 这件事. 嗯,对于一只没技术的程序猿来说,修 Bug 的确是一件让人头疼的事情,尤其是对于比 ...

  8. 2-10 就业课(2.0)-oozie:9、oozie与hue的整合,以及整合后执行MR任务

    5.hue整合oozie 第一步:停止oozie与hue的进程 通过命令停止oozie与hue的进程,准备修改oozie与hue的配置文件 第二步:修改oozie的配置文件(老版本的bug,新版本已经 ...

  9. KEIL编译器【C语言编译选项优化等级说明】【支持C99(变量声明在执行语句之后)】【反汇编设置】【C语言联合汇编】【use microlib选项】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了 ...

  10. mysql定时器每月执行一次_MySQL定时器可以设置执行次数吗

    满意答案 jgiewqh57 2018.01.26 采纳率:41%    等级:13 已帮助:10318人 mysql要实现定时执行sql语句就要用到Event 具体操作如下: 先看看看event 事 ...

最新文章

  1. 如何从文件内容创建Java字符串?
  2. vi/vim多行注释和取消注释
  3. 怎么调整字段长短_【芝士蛋糕怎么总烤不熟呢?】
  4. Linux中对两文件处理
  5. 飞思卡尔与PowerPC介绍
  6. 心算技巧 —— 大数的三次方根
  7. 如何利用迅雷下载百度云?
  8. 禅道安装与常见问题!!
  9. DOS命令行界面打开文件
  10. csm和uefi_如何以简单正确的姿势理解“UEFI”和“BIOS”?
  11. 微软自带比对神器,快速比对两个表格-高效好用又简单(99.9%的人没听说过)
  12. 这个用PHP开发的全开源商城系统可免费商用
  13. 要想学好平面设计,需要掌握一定的基本功和使用技巧
  14. 秦皇岛科学选育新品种 国稻种芯·中国水稻节:河北谱丰收曲
  15. android实现向右滑动返回功能
  16. c语言程序编写字体,c语言程序设计练习题
  17. Win7 设置任务栏自动隐藏后,偶尔不能自动隐藏?
  18. 阿里国际站新出的优品抢位会是弯道超车的新机会吗?
  19. ubuntu18镜像源修改为清华镜像源
  20. 未来十年,将是物联网的天下?!

热门文章

  1. 阶段3 2.Spring_01.Spring框架简介_04.spring发展历程
  2. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_7_Lambda表达式有参数有返回值的练习...
  3. P3970 [TJOI2014]上升子序列
  4. AfxMessageBox详细使用说明
  5. ActiveMQ学习笔记之异常
  6. C#winform初试报表
  7. PHP学习之函数中的全局参数
  8. 非biztalk项目的部署
  9. vue每次请求加头部(shiro+vue)
  10. 20165237 2017-2018-2 《Java程序设计》第8周学习总结