这是我参与「第四届青训营 」笔记创作活动的第17天

142 阅读4分钟

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 1 2 3 4 指定公平调度的配置文件,配置文件中定义每个队列以及每个队列的资源 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