CDH中yarn的动态资源池的相关配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CDH中yarn的动态资源池的相关配置相关的知识,希望对你有一定的参考价值。

参考技术A CDH Yarn资源队列划分管理
场景:根据不同项目或不同用户,对yarn资源队列进行划分,达到资源管控,任务管控的目的
CDH版本:5.x
配置:
1 yarn资源队列参数设置:
(1)yarn.scheduler.fair.user-as-default-queue false

解释:当设置为 true 时,如果未指定池名称,Fair Scheduler 将会使用用户名作为默认的池名称。当设置为 false 时,所有应用程序都在一个名为 default 的共享池中运行。设置成false是为了不根据用户名而自动分配资源池。

Fair Scheduler:yarn的公平调度器,对全局资源和对所有的应用作业都均匀分配的资源分配方法。默认情况下,它是基于内存来安排公平调度策略,也可以配置成为同时基于内存和CPU来进行调度。总的来说,它是一种基于内存,给集群中所提交的应用程序分配资源的调度器。

(2)yarn.scheduler.fair.allow-undeclared-pools false

解释:设置为 true 时,将使用默认设置创建在应用程序中指定但未明确配置的池。设置为 false 时,将在名为 default 的池中运行应用程序指定的未明确配置的池。此设置适用于应用程序明确指定某个池时以及应用程序运行所在的池的名称为与该应用程序关联的用户名的情况。

默认是true,允许创建未定义的资源池。当用户提交了一个作业,指定的队列不存在的时候,会自动创建出这个不存在的队列。设置成false,如果任务中指定了一个未定义的资源池,那么这个资源池将不会被创建,该任务会被分配到默认的资源池中,default。

修改完配置重启服务
2 CDH 动态资源队列配置

如图,第一步我们划分了2个资源池:、
(1)root.default:默认池,没有划分资源池的用户会提交到default资源池

权重定义了资源池之间分配资源的比例,目前集群中的default资源池和users资源池的权重各为1,那么集群中的资源会将50%分配给default,50%分配给users,但是这里的资源分配不是一个静态的概念,假如users中没有任务在运行,那么default资源池是允许使用超过50%的资源的,且资源池配置允许在线修改,修改后不需要重启yarn,因为RM会周期性的读取资源池的配置信息

设置default资源池的调度算法:使用DRF,即根据内存和CPU进行资源调度

yarn.scheduler.fair.preemption解释:启用后,如果在某些时间段未达到池的最小共享,Fair Scheduler 可以优先选取其他池中的应用程序。优先权可保证生产应用程序不缺乏资源,同时还可使群集用于实验和研究应用程序。为尽量减少计算资源浪费,Fair Scheduler 会优先选取最近启动的应用程序。

该项不建议开启。
Yarn的资源抢占本身就具有一定的资源开销,并且如果开启了资源抢占,对于长时间运行的任务容易出现延迟的情况。所以在此也建议配置队列时,要将长时间运行任务和执行时间较短的任务放在不同的队列中。同时对于队列的maxResource,可以适当的配置大些,这样即使不打开抢占,RM也是可以将一个队列的已经运行完成的资源回收分配给别的队列。从而达到提高资源的利用率。

解释:
yarn.acl.enable:指定是否应检查管理 ACL 中指定的用户和组执行管理操作的授权。
yarn.admin.acl:确定哪些用户和组可在任何池中提交和中止应用程序以及可以对 ResourceManager 角色发出命令的 ACL。

重启服务

添加was用户资源池

资源池的提交控制访问和管理控制访问的配置会自动继承到子队列中,比如在root资源池下的提交控制访问中配置了用户was,那么即使root.test的提交用户访问中配置是空,用户was也可以向队列test中提交yarn应用程序。

计划模式:可以根据不同时间段使用不同的资源池配置,合理使用集群的纵向资源

创建新的计划规则:

配置完计划模式,资源池会有多套配置,如下

配置完不同时间段使用的配置集后,修改各配置集的资源分配。例如streaming资源池在默认的配置集下,权重是2,使用的集群的资源占50%,但是在night配置集下配置的权重是1,使用的集群的资源占33%。而nigth配置集是在每天晚上8点到第二天早上六点时间段生效的。

放置规则:控制任务使用资源池的规则,即任务会根据以下的规则放到对应的资源池中执行,不需要自定义配置,在提交任务的时候显示的指定队列即可

用户限制:控制用户可以提交的最大应用程序数量,可以统一配置,也可以单独给某个用户配置

cdh之调整YARN(调优yarn 生产必做优化项)004

2019/3/26 星期二
调整YARN
本主题仅适用于YARN群集,并介绍如何为群集调整和优化YARN。
注意:下载Cloudera YARN调整电子表格以帮助计算YARN配置。 有关简短视频概述,请参阅调整YARN应用程序。
概观
此概述提供YARN群集的抽象描述和YARN调整的目标。

YARN群集由主机组成。 主机提供内存和CPU资源。 vcore或虚拟核心是主机CPU的使用份额。

调整YARN主要包括在工作主机上最佳地定义容器。 您可以将容器视为由内存和vcores组成的矩形图。 容器执行任务。

有些任务使用大量内存,对大量数据的处理最少。
其他任务需要大量处理能力,但使用的内存较少。例如,蒙特卡罗模拟评估许多可能的“如果?”场景在相对较小的数据集上使用大量处理能力。

YARN ResourceManager分配内存和vcores以尽可能以最有效的方式使用所有可用资源。理想情况下,很少或没有资源闲置。

应用程序是由一个或多个任务组成的YARN客户端程序。通常,任务使用容器中的所有可用资源。任务不能超过其指定的分配,确保它不能使用所有主机CPU周期或超过其内存分配。

通过将容器配置为使用除开销和其他服务所需的所有可用资源之外,调整YARN主机以优化vcores和内存的使用。

YARN调整有三个阶段。这些阶段对应于YARN调整电子表格中的选项卡。

????1、群集配置,您可以在其中配置主机。
????2、YARN配置,您可以量化内存和vcores。
????3、MapReduce配置,您可以为特定map和reduce任务分配最小和最大资源。

YARN和MapReduce具有许多可配置的属性。有关完整列表,请参阅Cloudera Manager配置属性。 YARN调整电子表格列出了这些属性的基本子集,这些属性最有可能提高常见MapReduce应用程序的性能。

群集配置
在Cluster Configuration选项卡中,您可以为YARN实现定义工作主机配置和群集大小。

机器配置
第1步:工作者主机配置 //表格中写单个主机配置
在下面的输入框中输入您可能的机器配置。 如果您不确定您计划购买哪种机器,请提供一些适合您预期购买的最小值。
与任何系统一样,可用的内存和CPU资源越多,集群处理大量数据的速度就越快。 具有4个带超线程的CPU的机器,每个CPU有6个内核,每个主机提供48个vcore。

2个单元服务器安装中的3 TB硬盘驱动器在JBOD(Just a Bunch Of Disks)配置中有12个可用插槽,这是在创建电子表格时性能和价格之间的合理平衡。 存储成本会随着时间的推移而降低,因此您可能会考虑使用4 TB磁盘。 较大的磁盘价格昂贵,并非所有用例都需要。

两个1千兆位以太网端口在电子表格发布时提供了足够的吞吐量,但10千兆位以太网端口是价格低于速度的选择。

第2步:工人主持人计划
现在您已从步骤1获得基本主机配置,请使用下表将资源(主要是CPU和内存)分配给在主机上运行的各种软件组件。
从您的操作系统开始至少8 GB,为Cloudera Manager开始至少1 GB。 如果CDH以外的服务需要其他资源,请在“其他服务”下添加这些数字。

HDFS DataNode使用至少1个内核和大约1 GB内存。 相同的要求适用于YARN NodeManager。
电子表格列出了几个可选服务:

???? Impala守护程序需要至少16 GB的守护程序。
???? HBase Region Servers需要12-16 GB的内存。
???? Solr服务器至少需要1 GB的内存。
???? Kudu平板电脑服务器至少需要1 GB的内存。

任何剩余资源都可用于YARN应用程序(Spark和MapReduce)。 在此示例中,有44个CPU内核可用。 在每个物理核心上设置所需的vcores乘数,以计算总可用vcores。

第3步:群集大小
定义了群集中每个主机的规范后,输入支持业务案例所需的工作主机数。 要了解并行计算的好处,请将主机数设置为最小值10。
YARN配置

在YARN Configuration选项卡上,验证可用资源并设置每个容器的最小和最大限制。

第4步:在群集上配置YARN
这些是群集的第一组配置值。 您可以在YARN-> Configuration中设置这些值
步骤4和5:验证设置
步骤4从步骤2中提取内存和vcore编号。
步骤5显示群集的总内存和vcores。
转到资源管理器Web UI(通常是http:// <ResourceManagerIP>:8088 /并验证“内存总计”和“Vcores Total”与上面的值匹配。如果您的机器没有坏节点,那么数字应该完全匹配。

步骤6:验证群集上的容器设置
为了让YARN作业干净地运行,您需要配置容器属性。
在步骤6中,您可以更改影响容器大小的值。
最小vcores数应为1.当需要额外的vcores时,一次添加1将导致最有效的分配。 将vcore预留的最大数量设置为节点的大小。
设置内存的最小和最大预留。 增量应该是可以影响性能的最小量。 这里,最小值约为1 GB,最大值约为8 GB,增量为512 MB。

步骤6A:集群容器容量
本节将告诉您群集的容量(就容器而言)。
步骤6A允许您根据输入的数字验证群集中容器的最小和最大数量。
最大可能容器数,基于内存配置
最大可能容器数,基于vcore配置
基于每个磁盘轴2个容器的容器编号
根据内存配置,最小可能容器数
根据vcore配置,最小可能容器数

步骤6B:容器健全检查
本节将针对主机在STEP 6中对容器参数进行一些基本检查。

MapReduce配置
在MapReduce Configuration选项卡上,您可以规划增加的特定于任务的内存容量。
第7步:MapReduce配置
对于CDH 5.5及更高版本,我们建议仅为map和reduce任务指定堆或容器大小。 未指定的值将根据设置mapreduce.job.heap.memory-mb.ratio计算。 此计算遵循Cloudera Manager并根据比率和容器大小计算堆大小。
步骤7A:MapReduce完整性检查
完整性检查MapReduce设置对容器的最小/最大属性。
通过步骤7A,您可以一目了然地确认所有最小和最大资源分配都在您设置的参数范围内。

连续调度
启用或禁用连续调度会更改YARN连续或基于节点心跳调度的频率。 对于较大的群集(超过75个节点)看到繁重的YARN工作负载,建议通常使用以下设置禁用连续调度:

???? yarn.scheduler.fair.continuous-scheduling-enabled应为false
???? yarn.scheduler.fair.assignmultiple应该是真的

在大型群集上,连续调度可能导致ResourceManager无响应,因为连续调度会遍历群集中的所有节点。

有关连续调度调优的更多信息,请参阅以下知识库文章:FairScheduler使用assignmultiple调整和连续调度

我们没有75个节点,设置为yarn.scheduler.fair.continuous-scheduling-enabled 为true
yarn.scheduler.fair.assignmultiple = true

小结:
yarn中容器内存的计算方法
yarn.nodemanager.resource.memory-mb
容器虚拟 CPU 内核
yarn.nodemanager.resource.cpu-vcores
//这2个值是更具最后用到的资源剩下来 多少给yarn的
提示:如果yarn.nodemanager.resource.memory-mb=2G yarn.nodemanager.resource.cpu-vcores=2 4个节点那么在192.168.0.142:8088/cluster 界面上就会有 “Memory Total=8G” “ VCores Total=8”

最小容器内存
yarn.scheduler.minimum-allocation-mb = 1G //推荐值
最小容器虚拟 CPU 内核数量
yarn.scheduler.minimum-allocation-vcores = 1 //推荐值
最大容器内存
yarn.scheduler.maximum-allocation-mb = < yarn.nodemanager.resource.memory-mb
最大容器虚拟 CPU 内核数量
yarn.scheduler.maximum-allocation-vcores = < yarn.nodemanager.resource.cpu-vcores //推荐值
容器内存增量
yarn.scheduler.increment-allocation-mb = 512M
容器虚拟 CPU 内核增量
yarn.scheduler.increment-allocation-vcores = 1 //推荐值

ApplicationMaster 虚拟 CPU 内核
yarn.app.mapreduce.am.resource.cpu-vcores = 1 //推荐值
ApplicationMaster 内存
yarn.app.mapreduce.am.resource.mb = 1024M
ApplicationMaster Java 选项库
yarn.app.mapreduce.am.command-opts = -Djava.net.preferIPv4Stack=true -Xmx768m

堆与容器大小之比
mapreduce.job.heap.memory-mb.ratio = 0.8 默认
Map 任务 CPU 虚拟内核
mapreduce.map.cpu.vcores = 1
Map 任务内存
mapreduce.map.memory.mb = 1024
Map 任务 Java 选项库
mapreduce.map.java.opts = 忽视 ignored
I/O 排序内存缓冲 (MiB)
mapreduce.task.io.sort.mb = 400
Reduce 任务 CPU 虚拟内核
mapreduce.reduce.cpu.vcores = 1
Reduce 任务内存
mapreduce.reduce.memory.mb = 1024M
Reduce 任务 Java 选项库
mapreduce.reduce.java.opts 忽视

Map 任务最大堆栈 819 //是 mapreduce.map.memory.mb 0.8
Reduce 任务最大堆栈 819M //mapreduce.reduce.memory.mb
0.8
ApplicationMaster Java 最大堆栈 819.2 //这个数字是yarn.app.mapreduce.am.resource.mb * 0.8得到的
链接中,有建议的值,但是我们这是测试集群,资源很小,生产集群上具体见链接最后的建议值

参考链接:
https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cdh_ig_yarn_tuning.html
CDH5性能调优 http://blog.hylstudio.cn/archives/488

以上是关于CDH中yarn的动态资源池的相关配置的主要内容,如果未能解决你的问题,请参考以下文章

Spark优化-开启动态资源分配

cdh---yarn资源

Spark on Yarn提交配置没有生效

YarnYarn 核心参数介绍

YARN介绍

cdh之调整YARN(调优yarn 生产必做优化项)004