YARN

自从hadoop2.0之后, 我们可以使用apache yarn 来对集群资源进行管理。yarn把可以把资源(内存,CPU)以Container的方式进行划分隔离。YARN会管理集群中所有机器的可用计算资源. 基于这些资源YARN会调度应用(比如MapReduce)发来的资源请求, 然后YARN会通过分配Container来给每个应用提供处理能力, Container(容器)是YARN中处理能力的基本单元, 是对内存, CPU等的封装(容器)。

ResourceManager:以下简称RM。YARN的中控模块,负责统一规划资源的使用。
NodeManager:以下简称NM。YARN的资源结点模块,负责启动管理container。
ApplicationMaster:以下简称AM。YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container做什么事情。
Container:资源容器。YARN中所有的应用都是在container之上运行的。AM也是在container上运行的,不过AM的container是RM申请的。

了解上面的基本概念之后,就可以开始优化集群的配置了

配置NM的注册资源

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>30</value>
<discription>每个nodemanager可分配的cpu总核数</discription>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>122880</value>
<discription>每个nodemanager可分配的内存总量</discription>
</property>

优化建议:
1. cpu核数=逻辑核数-其他应用数(datanode?work?zk?等)
cat /proc/cpuinfo | grep "processor" | wc -l
可以查看集群的逻辑核数
2. 内存建议是CPU的整数倍,给系统预留好足够用的内存

ApplicationMaster配置

<property>
<name>yarn.app.mapreduce.am.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>4096</value>
<discription>ApplicationMaster的占用的内存大小</discription>
</property>

优化建议
1. cpu和内存比例和 nm的分配比例保持一致

Container 配置优化

<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
<discription>单个任务可申请最大内存,默认8192MB</discription>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>4</value>
<discription>单个任务可申请的最多虚拟CPU个数</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
<discription>单个任务可申请的最小虚拟CPU个数</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</value>
<discription>container最小可申请的内存</discription>
</property>

优化建议
1. 在调度器中,很多资源计算部分会转化为这个最小值的N倍进行计算。所以,设定可分配内存等资源的时候,最好是刚好为这个最小值的倍数
2. cpu/内存比例保持一致
3. YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制来控制容器。

mapreduce参数设置

<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
<discription>map的内存大小</discription>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072M</value>
<discription>用户设定的map/reduce阶段申请的container的JVM参数。最大堆设定要比申请的内存少一些,用于JVM的非堆部分使用0.80-0.85建议</discription>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>8192</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6144M</value>
</property>

优化参考
1. 如果集群主要使用mr进行计算,那么建议map的内存和cpu和容器最小的相等。
2. 一个容器里面最多跑几个map?yarn.scheduler.maximum-allocation-mb/mapreduce.map.memory.mb=4

问题来了
如何控制一个nodemanager里Container的数量呢?
<property>
<name>yarn.scheduler.fair.assignmultiple</name>
<value>true</value>
<discription>是否允许NodeManager一次分配多个容器</discription>
</property>
<property>
<name>yarn.scheduler.fair.max.assign</name>
<value>20</value>
<discription>如果允许一次分配多个,一次最多可分配多少个,这里按照一个最小分配yarn.scheduler.minimum-allocation-mb4gb来计算总共内存120/4=30给20即可</discription>
</property>

Fari Scheduler 配置案例

24个节点每个节点120GB内存30个逻辑CPU


<?xml version="1.0"?>
<allocations>
<queue name="mapreduce">
<minResources>368640 mb,90 vcores</minResources><!--3 nodes-->
<maxResources>2334720 mb,570 vcores</maxResources><!--19 nodes-->
<maxRunningApps>70</maxRunningApps>
<weight>5</weight>
<queue name="vipquery">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>8</weight>
</queue>
<queue name="hive">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>7</weight>
</queue>
<queue name="hadoop">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>30</maxRunningApps>
<weight>6</weight>
</queue>
</queue>
<queue name="default">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>614400 mb,150 vcores</maxResources><!--5 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>1</weight>
</queue>
</allocations>

总结

通过合理的配置Yarn可以有效的控制,资源抢占,还有峰值并发等问题。

Yarn参数优化(Fair Scheduler版本)相关推荐

  1. Hadoop YARN配置参数剖析(4)—Fair Scheduler相关参数

    首先在yarn-site.xml中,将配置参数yarn.resourcemanager.scheduler.class设置为org.apache.hadoop.yarn.server.resource ...

  2. hadoop3 Yarn容量(Capacity Scheduler)调度器和公平(Fair Scheduler)调度器配置

    文章目录 组件模块说明 容量调度器(Capacity Scheduler) 容量调度器特点 公平调度器(Fair Scheduler) 配置容量调度器案例 例子1 例子2 例子3 例子4 配置公平调度 ...

  3. Mapreduce和Yarn概念,参数优化,作用,原理,MapReduce计数器 Counter,MapReduce 多job串联之ControlledJob(来自学习资料)

    3.3. MapReduce与YARN 3.3.1 YARN概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运 ...

  4. Mapreduce和Yarn概念,参数优化,作用,原理,MapReduce计数器 Counter,MapReduce 多job串联之ControlledJob(来自学习资料)...

    3.3. MapReduce与YARN 3.3.1 YARN概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运 ...

  5. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列

    前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...

  6. tensorflow官方Blog-使用Keras Tuner超参数优化框架 进行超参数调整 ,具体实现版本

    文章目录 进入正题,keras tuner超参数优化框架 模型构建def build_model(hp): 实例化tuner 加载数据集,进行超参数搜索tuner.search() 找到最佳的模型tu ...

  7. hadoop job 未跑满资源_Hadoop多用户资源管理–Fair Scheduler介绍与配置

    关键字:Hadoop 多用户.资源.fair scheduler 在一个公司内部的Hadoop Yarn集群,肯定会被多个业务.多个用户同时使用,共享Yarn的资源,如果不做资源的管理与规划,那么整个 ...

  8. Hive On Tez,Tez 和 MapReduce engine 参数优化

    Hive On Tez Hive 默认支持 MapReduce,Tez,Spark(在 SparkSQL 中支持) 等执行引擎.因此给 Hive 换上 Tez 非常简单,只需给 hive-site.x ...

  9. Yarn的调度器--Scheduler探究

    引言 在Yarn体系中,Scheduler负责为Application分配资源,按照调度策略可分为以下3种: FIFO Scheduler Capacity Scheduler Fair Schedu ...

最新文章

  1. LabVIEW设置应用程序显示标签透明
  2. 《基于张量网络的机器学习入门》学习笔记6
  3. SaaS产品设计,从0到1案例实操
  4. [ACM] hdu 1285 确定比赛名次 (拓扑排序)
  5. rgb cmyk lab的区别
  6. 关于HTTP和HTTPS的区别
  7. C# 8.0 的默认接口方法
  8. python如何改变数据类型_如何改变numpy数组的数据类型和形状?
  9. oracle11g trc 文件,Oracle11g11.2.0.1设置HuagePage导致TRC变大变多
  10. vue key重复_Vue 前端面试题
  11. Linux Exploit系列之七 绕过 ASLR -- 第二部分
  12. MYSQL中SET NAMES UTF8的作用和内涵
  13. 利用百度地图坐标拾取系统获取经纬度,并将其坐标转换保存成SHP文件
  14. Spring使用json转换工具
  15. 百度招聘Android客服端(2)
  16. stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作
  17. opera 无法访问网络
  18. 华中师大计算机专业陈鹏,华师男子不满工作分配流浪16年 与弟弟见面后拒回家...
  19. 北京信息科技大学第十一届程序设计竞赛(重现赛)J andy的树被砍了
  20. Rocket-Chip功能说明

热门文章

  1. 给JPEG添加Exif图片说明信息的简单方法
  2. 2021-09-15 doc学习
  3. Halcon联合C#实现相机实时显示采集图像
  4. C语言学习笔记————code
  5. Docker一键脚本安装、命令使用和常用软件安装
  6. cocos creator 碰撞检测系统collider
  7. Pandas基本操作教程
  8. 学习python中的pandas教程
  9. FFmpeg音视频解码流程
  10. 按照js对象中的某个值进行排序