[Yarn基础]-- Yarn资源分配
背景
在 2018年 11月的某一天,我发现 spark-submit 设置的资源参数未生效( –executor-cores 10),仔细排查后定位是Yarn 的分配策略使用有误,由于我们集群是使用 Ambari 安装的,未修改Yarn默认的分配策略(org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator),所以导致 集群的 cpu 没有充分利用,每个 Container 只会分配 1core ,而Memory 则被榨干。
解决方法:修改分配策略为—> org.apache.hadoop.yarn.util.resource. DominantResourceCalculator
Yarn 的分配策略
我们可以使用YARN中的Capacity Scheduler来管理群集容量。然后使用Capacity Scheduler DefaultResourceCalculator 或 DominantResourceCalculator 分配可用资源。
YARN中的基本调度单元是队列。每个队列的容量指定可用于提交到队列的应用程序的群集资源的百分比。
那么可以在层次结构中设置队列,以反映使用群集资源的组织,group 和个人所需的数据库结构,资源要求和访问限制。
-
如果你希望资源计算仅考虑用于资源计算的可用内存,则可以使用 DefaultResourceCalculator。使用 DefaultResourceCalculator 时,将根据可用内存分配资源,而不会考虑 用户显示指定的 cpu core 数量。
-
如果你有多种资源类型,则使用 DominantResourceCalculator 来启用CPU,GPU和 Memory scheduler。主导资源计算器基于资源分配的Dominant Resource Fairness(DRF)模型。DRF旨在在混合工作负载集群中的不同类型的进程之间公平地分配CPU,GPU和内存资源。
举例
用户A运行 CPU 繁重的任务:DRF会为用户A运行的任务分配更多的CPU和更少的内存
用户B运行 内存繁重的任务:DRF会为用户B运行的任务分配更少的CPU和更多的内存
在单个资源情况下,所有作业都请求相同的资源,DRF会降低该资源的最大最小公平性,也就是说集群资源有限的情况下,DRF 会按照调度策略分配。
Yarn 调度策略
YARN(MRv2)和MapReduce(MRv1)计算框架支持以下调度程序:
- FIFO - 根据到达时间的先后顺序分配资源。
- Fair Scheduler - 将资源分配给加权池,每个池内都有公平共享。在配置池的调度策略时,域资源公平性(DRF)是一种公平调度器。
- Capacity - 通过每个池中的FIFO调度为池分配资源。
YARN和MapReduce的调度程序默认值为:
名称/厂商 | Cloudera | Hortonworks |
---|---|---|
Yarn | CDH 5和CDH 4将默认设置为Fair Scheduler; 但是Cloudera推荐Fair Scheduler |
默认为 FIFO ; 资源分配使用 Capacity Scheduler’s DefaultResourceCalculator |
MapReducer | CDH 5和CDH 4将默认设置为Fair Scheduler。 但是Cloudera推荐Fair Scheduler |
未知 |
讨论
为了减少不必要的运维成本开销(因为修改配置需要重启 Yarn 、HDFS、Hive和 Oozie等组件),那么在安装和部署集群时,就要先考虑好集群各个组件的配置。
关于 Yarn 需要注意:
- 资源分配策略
org.apache.hadoop.yarn.util.resource. DominantResourceCalculator - 修改java参数
ApplicationMaster 内存(yarn.app.mapreduce.am.resource.mb) > ApplicationMaster Java 最大堆栈 - 修改nodemanager的目录
保证目录名称一致、不要将小盘目录添加到 nm 上 - 修改允许链接申请资源的用户
有 Kerberos 认证时,需要考虑这个问题
参考
- https://docs.hortonworks.com/HDPDocuments/HDP3/HDP-3.1.0/data-operating-system/content/about_yarn_resource_allocation.html
- https://www.cloudera.com/documentation/enterprise/5-11-x/topics/admin_schedulers.html
- https://www.cloudera.com/documentation/enterprise/5-11-x/topics/cdh_ig_yarn_tuning.html
- https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
- https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
- Yarn资源分配示例
- Yarn资源请求处理和资源分配原理解析
- Hadoop基础教程-第5章 YARN:资源调度平台(5.6 YARN的命令)(草稿)
- 1.5 基础知识——GP2.3 提供资源(Resources) 与 GP2.4 分配职责(Responisbility)
- yarn架构——本质上是在做解耦 将资源分配和应用程序状态监控两个功能职责分离为RM和AM
- YARN的 AM与RM通信,申请资源分配过程
- Hadoop基础教程-第5章 YARN:资源调度平台(5.5 YARN的调度器)(草稿)
- Spark动态资源分配在yarn的配置
- 1.5 基础知识——GP2.3 提供资源(Resources) 与 GP2.4 分配职责(Responisbility)
- spark&yarn&storm的资源管理分配对并发性的考量
- Hadoop基础教程-第5章 YARN:资源调度平台(5.4 YARN集群运行)(草稿)
- Hadoop基础教程-第5章 YARN:资源调度平台(5.2 YARN参数解读与调优)
- Java基础中环境变量的配置以及Java的内存资源调用分配机制
- 1.5 基础知识——GP2.3 提供资源(Resources) 与 GP2.4 分配职责(Responisbility)
- Spark在Yarn上的动态资源分配
- Hadoop基础教程-第5章 YARN:资源调度平台(5.3 YARN集群配置)(草稿)
- 1.5 基础知识——GP2.3 提供资源(Resources) 与 GP2.4 分配职责(Responisbility)
- hadoop之yarn的资源分配详解
- Hadoop基础教程-第5章 YARN:资源调度平台(5.1 YARN介绍)(草稿)
- cdh yarn nodemanager 可用资源分配