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. YARN的Fair Scheduler和Capacity Scheduler

    关于Scheduler YARN有四种调度机制:Fair Schedule,Capacity Schedule,FIFO以及Priority: 其中Fair Scheduler是资源池机制,进入到里面 ...

  2. 三:Fair Scheduler 公平调度器

    参考资料: http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html http://h ...

  3. Hadoop YARN 调度器(scheduler) —— 资源调度策略

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_yarn_resource_scheduler 搜了 ...

  4. 【Hadoop离线基础总结】MapReduce参数优化

    MapReduce参数优化 资源相关参数 这些参数都需要在mapred-site.xml中配置 mapreduce.map.memory.mb 一个 MapTask 可使用的资源上限(单位:MB),默 ...

  5. hadoop之yarn(优化篇)

    最近一直在学习hadoop的一些原理和优化,然后也做了一些实践,也有没有去做实践的,反正个人观点都记录下来 一.yarn的介绍 YARN的基本结构由一个ResourceManager与多个NodeMa ...

  6. Fair Scheduler 队列设置经验总结

    Fair Scheduler 队列设置经验总结 由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占.在使用过程中,才明白资源抢占的一些特点.在这里总结一下. 只有一个队 ...

  7. MySQL配置文件my.cnf参数优化和中文详解

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...

  8. jvm参数优化

    一.HotSpot JVM 提供了三类参数 现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色.例如:自适应内存管理.垃圾收集.及时编译.动态类加载.锁优化等.虽然有 ...

  9. storm第一篇--概念,例子,参数优化

    1 概念 目前最新的0.8.0版本里面 worker -> 进程.一个worker只能执行同一个spout/bolt的task,一个worker里面可以有多个executor. executor ...

随机推荐

  1. Linux运维入门到高级全套系列PDF

    Linux运维入门到高级全套系列PDF(转) [日期:2016-08-01] 来源:Linux社区  作者:Linux [字体:大 中 小]     Linux 学习技巧 初学者可以自己安装虚拟机,然 ...

  2. 500 份源码合集——GitHub 热点速览 v.21.02

    作者:HelloGitHub-小鱼干 GitHub 项目名,如同变量命名,一个好的项目名能让你一眼就知道它是什么.500-AI-Machine-learning-Deep-learning-Compu ...

  3. 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理

    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view, 只能看到自己项目的jenkins job. 但是,jenkins默认的权限管理 ...

  4. IP包头分析

    • IP包头是IP协议(网络层,第三层)为数据包添加的头部.        ○ 格式:        ○ ○ 拆开看,每行是4+4+8+16=32bit=4Byte        ○ ip协议最短20 ...

  5. 【剑指 Offer】06.从尾到头打印链表

    题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...

  6. java8新特性之stream流

    Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效. ...

  7. 避免用using包装DbContext【翻译】

    EF和EF Core 的DbContext类实现IDisposable接口.因此,很多最佳编程实践中都建议你将它们放在一个using()块中.不幸的是,至少在Web应用程序中,这样做通常不是一个好主意 ...

  8. LeetCode-P53题解【动态规划】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: https://leetcode.com/problems/maximum-subarray/ ...

  9. C# Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

    Twain 随着扫描仪.数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值.然而,支持这种光栅数据的显示和操作成本很高,应用程序开发人员需要创建用户界面并内置设 ...

  10. 内存空间有限情况下的词频统计 Trie树 前缀树

    数据结构与算法专题--第十二题 Trie树 https://mp.weixin.qq.com/s/nndr2AcECuUatXrxd3MgCg