参数调优
Container
关于yarn的调优,就是调container
虚拟化的是内存+cpu的vcores组成的,是运行task任务的
1.生产如何调优container参数?
生产预留空间原因:
1.oom-kill机制
2.Linux系统防止夯住
3.给未来部署组件预留空间
假设128G 16物理core
1.1 系统装完 消耗1G
1.2 系统预留20%内存(包含1G)
1>oom-kill机制
2>Linux系统防止夯住
3>给未来部署组件预留空间
128G*20%=25.6G==26G
1.3 假设只有DN NM节点
生产上部署一般遵循存储技术一体,就是计算时发现本节点有数据不需要去其他节点拉取,节省网络io
这种一般叫做 数据本地化
生产上一般设置:
DN=2G
NM=4G
128-26=102-2-4=96G
全部用来设计给真正干活的container用,就是要将内存分配给container容器
1.4container内存
yarn.nodemanager.resource.memory-mb 默认为8G. 我们需要设置为96G
yarn.sheduler.minimum-allocation-mb=1G 极限情况下,96个container
yarn.sheduler.maximum-allocation-mb=96G 极限情况下,1个container
说明sheduler是作业,是调度
container内存会自动增加,默认是1G递增,CDH yarn配置,但是一般都不需要调整
1.5 container vcore
yarn自己设计引入的概念 是vcore
设计初衷是考虑不同的机器的cpu的性能不一样,每个cpu计算的能力都不同
比如某个物理cpu是另外一个物理cpu的1倍,这是通过设置第一个物理虚拟cpu的vcore进行弥补这个差异。
如:下面是一个例子
如:下面是一个例子
物理的core:pcore
虚拟的core:vcore
第一台机器(配置好): pcore:vcore=1:2 16core:32core
第二台机(配置弱)器: pcore:vcore=1:1 16core:16core
现在生产上不考虑哪个机器是否配置好,统一配置 pcore:vcore=1:2
问题1:为什么要设置vcore 1:2呢?
答:在计算的过程中container容器需要vcore,并发的任务是靠vcore
pcore:vcore=1:2 16core:32core
pcore:vcore=1:1 16core:16core
yarn.nodemanager.resource.pcores-vcores-multiplier 2 表示是pcore:vcore=1:2
yarn.nodemanager.resource.cpu-vcores 32 #32个vcore
yarn.sheduler.minimum-allocation-mb=1G 极限情况下,96个vcores
yarn.sheduler.maximum-allocation-mb=32G 极限情况下,1个vcores
1.2生产如何设置 突破口
cloudera公司推荐,一个container的vcore最好不要超过5个,那么设置4
yarn.scheduler.maximum-allocation-vcores 4 极限情况下,只有8个container
1.3整合memory cpu
确定 4 vcore 8个container
yarn.nodemanager.resource.memory-mb 96G
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 12G 极限情况container 8个 98G/8=12G
但是spark计算时内存有些指标比较大,那么这个参数必然调大,
那么这种理想化,完美化的设置必然被打破,到时以memory为主
yarn.nodemanager.resource.cpu-vcores 8
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4 #经验值
2.YARN资源调度器
调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景,为此,yarn提供了多种调度器和可配置的策略提供我们选择
FIFO Scheduler 先进先出
Capacity Scheduler 计算
FairScheduler 公平 生产
2.1FIFO Scheduler 先进先出(相当于队列)
应用场景:系统资源(即container)
2.2Capacity Scheduler 调度器
有一个专门的队列用来运行小任务,
但是为小任务专门设置一个队列会预先占用一定的集群资源,
这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
2.3Fair Scheduler 生产上应用
我们不需要预先占用一定的系统资源,
Fair调度器会为所有运行的job动态的调整系统资源。