1、YARN的资源分配
-
每个NodeManager能使用机器的多少资源
-
每个程序的每个Task使用多少资源来运行
-
YARN的资源配置
每台NodeManger能够使用的最大物理内存数
yarn.nodemanager.resource.memory-mb 8192每台NodeManger能够使用的最大物理CPU核数
yarn.nodemanager.resource.cpu-vcores 8每个应用最少申请的内存
yarn.scheduler.minimum-allocation-mb 1024每个应用最多申请的内存
yarn.scheduler.maximum-allocation-mb 8192每个应用最少申请的CPU核数
yarn.scheduler.minimum-allocation-vcores 1每个应用最多申请的CPU核数,这个值一般等于最大申请内存的GB值
yarn.scheduler.maximum-allocation-vcores 8虚拟内存,实际上硬盘存储,将内存中暂时不需要处理的数据先写入硬盘,需要用到的时候再读进来
yarn.nodemanager.vmem-pmem-ratio 2.1
关闭物理内存检查-
yarn.nodemanager.pmem-check-enabled false- 关闭虚拟内存检查
yarn.nodemanager.vmem-check-enabled false
-
上面的这些参数值,在实际工作中,要根据具体的机器的资源来合理的更改
2、YARN的任务调度
- 什么是调度?
- 如果我们向YARN中提交运行了多个程序
- YARN中整个集群的资源是固定
- 谁先执行,谁后执行,大家怎么分配资源
调度类型:三种
FIFO:先进先出
YARN中构建一个队列【管道:一头进,一头出】
- 所有提交的任务都
按照提交的时间放到队列中
- 先放入的程序,享有整个YARN中的所有资源,哪怕你用不了,那也是你的
- 直到先放进去的程序运行完成,才会运行第二个程序
特点
单队列,先进先出
- 运行的程序,享有所有资源
程序不能并行也不能并发
- 并行:多个程序在不同的队列中同时运行
- 并发:在一个队列中多个程序同时运行
这种方式不会选用的
Capacity:容量调度机制
YARN中构建多个队列,每个队列是FIFO
- 将整个YARN的资源分配到不同的队列中
- YARN:24core 24GB
- 队列1:12core 12GB
- 队列2:12Core 12GB
- 运行程序时,可以指定将程序提交到哪个队列中运行
特点
多队列,但是每个队列内部还是FIFO
并行运行多个程序
,每个程序运行在不同的队列中- 支持
资源的动态抢占
:如果队列1的资源不够,队列2的资源非常充足,借队列2的资源来运行 - 举例
- 程序1:队列1:13core13GB
- 队列2没有程序,队列1可以跟队列2借,程序执行完成以后还回去
- 这种方式是Apache版本的Hadoop默认的调度方式
- 提交程序时,如何设置指定提交到哪个队列中运行:
mapreduce.job.queuename = default
Fair:公平调度机制
这种方式是CDH版本的默认调度方式,也是工作中普遍使用的方式
- YARN中构建多个队列,每个队列是公平的共享资源的
- 每个队列里是可以同时运行多个程序的
- 支持一个队列中并发运行多个程序
- 第一个程序:会享有这个队列的所有资源
- 第二个程序:将当前空闲的资源与第二个程序进行平分
- |
- 让每个程序都能拿到资源
特点
多队列,队列内部的每个程序共享资源
允许一个队列中并发运行,运行多个队列并行运行
也支持队列间的资源的动态抢占
指定队列程序的优先级
- 修改调度机制的配置:yarn-site.xml
yarn.resourcemanager.scheduler.class= org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
|
修改为公平调度
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
指定公平调度的配置文件,配置文件中定义每个队列以及每个队列的资源
yarn.scheduler.fair.allocation.file etc/hadoop/fair-scheduler.xml没有指定队列名时,是否使用用户名作为队列名称
yarn.scheduler.fair.user-as-default-queue true是否允许资源抢占
yarn.scheduler.fair.preemption true最大抢占比例
yarn.scheduler.fair.preemption.cluster-utilization-threshold 0.8是否启用权重
yarn.scheduler.fair.sizebasedweight true是否允许分配多个container
yarn.scheduler.fair.assignmultiple true是否允许分配多个container
yarn.scheduler.fair.max.assign 20放弃等待优先本地计算的节点比例,-1表示都不放弃
yarn.scheduler.fair.locality.threshold.node -1放弃等待优先机架计算的节点比例,-1表示都不放弃
yarn.scheduler.fair.locality.threshold.rack -1是否允许创建未定义的队列
yarn.scheduler.fair.allow-undeclared-pools true表示重新计算公平调度的间隔,单位毫秒
yarn.scheduler.fair.update-interval-ms 500