目录
作业调度器
Hadoop作业调度器主要有三种:FIFO,容量(Capacity Scheduler)和公平(Fair Scheduler)。
Hadoop3.1.3默认的资源调度器是Capacity Scheduler
CDH框架默认调度器是Fair Scheduler
FIFO先进先出调度器
FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
一个job里可能包含多个MapTask和多个ReduceTask,把Job分配给服务器节点资源。
容量调度器
多队列
每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
容量保证
管理员可为每个队列设置资源最低保证和资源使用上限。
灵活性
如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其它队列借调的资源会归还给该队列。
多租户
支持多用户共享集群和多应用程序同时运行。
为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
算法
- 队列资源分配:从root开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源。
- 作业资源分配:默认按照提交作业的优先级和提交时间顺序分配资源。
- 容器资源分配:按照容器的优先级分配资源,如果优先级相同,按照数据本地性原则,即(1)任务和数据在同一节点 2)任务和数据在同一机架 (3)任务和数据不在同一节点也不在同一机架
图
公平调度器
同队列所有任务共享资源,在时间尺度上获得公平的资源。
和容量调度器的相同点
- 多队列
- 容量保证
- 灵活性
- 多租户
和容量调度器的不同点
- 核心调度策略不同,容量调度器会优先选择资源利用率低的队列,而公平调度器会优先选择对资源的缺额比例大的。
- 每个队列可以单独设置资源分配方式,容量调度器可以设置FIFO或DRF,而公平调度器可以设置FIFO,FAIR,DRF。
缺额
公平调度器的设计目标是:在时间尺度上,所有作业获得公平的资源。某一时刻一个作业应获资源和实际获取资源的差距叫“缺额”
所以调度器会优先为缺额大的作业分配资源。
策略
- 公平调度每个队列资源分配策略如果选择FIFO的话,此时公平调度器相当于上面讲过的容量调度器。
- Fair策略是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。就是说,加入一个队列里有两个应用程序同时运行,则每个应用程序可得到1/2的资源,如果三个应用程序同时运行,则每个程序可得到1/3的资源。具体资源分配流程和容量调度器一致:选择队列;选择作业;选择容器
资源分配方式
DRF策略
很多时候资源并不是单一标准,而是有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。
在YARN中,可以使用DRF来决定如何调度
YARN常用命令
查看任务
1.列出所有Application
yarn application -list
2.根据Application状态过滤(ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)
yarn application -list -appStates **FINISHED**
3.Kill掉Application
yarn application -kill application_1612577921195_0001
查看日志
1.查询Application日志
yarn logs -applicationId
yarn logs -applicationId application_1612577921195_0001
2.查询Container日志
yarn logs -applicationId -containerId
yarn logs -applicationId application_1612577921195_0001 -containerId container_1612577921195_0001_01_000001
查看尝试运行的任务
1.列出所有Application尝试的列表
arn applicationattempt -list application_1612577921195_0001
2.打印ApplicationAttemp状态
yarn applicationattempt -status <ApplicationAttemptId>
查看容器
1.列出所有Container
yarn container -list
yarn container -list appattempt_1612577921195_0001_000001
2.打印Container状态
yarn container -status
yarn container -status container_1612577921195_0001_01_000001
查看节点状态
yarn node -list -all
更新配置
yarn rmadmin -refreshQueues
查看队列
yarn queue -status <QueueName>
生产环境核心配置参数
ResourceManager相关
配置调度器,默认容量:yarn.resourcemanager.scheduler.class
ResourceManager处理调度器请求的线程数量,默认50:yarn.resourcemanager.scheduler.client.thread-count
NodeManager相关
yarn.nodemanager.resource.detect-hardware-capabilities 是否让yarn自己检测硬件进行配置,默认false
yarn.nodemanager.resource.count-logical-processors-as-cores 是否将虚拟核数当作CPU核数,默认false
yarn.nodemanager.resource.pcores-vcores-multiplier 虚拟核数和物理核数乘数,例如:4核8线程,该参数就应设为2,默认1.0
yarn.nodemanager.resource.memory-mb NodeManager使用内存,默认8G
yarn.nodemanager.resource.system-reserved-memory-mb NodeManager为系统保留多少内存
yarn.nodemanager.resource.cpu-vcores NodeManager 使用CPU核数,默认8个
yarn.nodemanager.pmem-check-enabled 是否开启物理内存检查限制container,默认打开
yarn.nodemanager.vmem-check-enabled 是否开启虚拟内存检查限制container,默认打开
yarn.nodemanager.vmem-pmem-ratio 虚拟内存物理内存比例,默认2.1
Container相关
yarn.scheduler.minimum-allocation-mb 容器最最小内存,默认1G
yarn.scheduler.maximum-allocation-mb 容器最最大内存,默认8G
yarn.scheduler.minimum-allocation-vcores 容器最小CPU核数,默认1个
yarn.scheduler.maximum-allocation-vcores 容器最大CPU核数,默认4个