YARN资源管理与任务调度
1.1 Y A R N YARN YARN的架构
1.1.1 功能
- 分布式资源管理与任务调度框架。
- 资源管理:将整个集群的所有机器的
C
P
U
CPU
CPU和内存进行统一化管理
- 每一台机器运行程序时,使用多少资源,都由 Y A R N YARN YARN进行分配
- 任务调度:当有多个任务一起提交时,资源的分配和任务的优先级
1.1.2 架构
主从架构
- 主节点:
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
resourcemanager
resourcemanager
- 接收所有任务的提交
- 管理所有的从节点
- 全局集群的资源管理和任务调度
- 每个 n o d e m a n a g e r nodemanager nodemanager运行所有程序能够使用的资源
- 从节点:
n
o
d
e
m
a
n
a
g
e
r
nodemanager
nodemanager
- 启动程序的运行环境:计算进程
- 使用以及管理这台机器的资源,每个程序再这台机器能使用多少。
1.2 Y A R N YARN YARN的任务运行流程
1.2.1 架构图
1.2.2 架构说明
- 客户端向 y a r n yarn yarn提交 J o b Job Job,首先找到 r e s o u r c e m a n a g e r resourcemanager resourcemanager主节点分配资源。
- r e s o u r c e m a n a g e r resourcemanager resourcemanager开启一个 C o n t a i n e r Container Container,再 C o n t a i n e r Container Container中运行一个 A p p l i c a t i o n Application Application M a n a g e r Manager Manager,并且随机找一台 n o d e m a n a g e r nodemanager nodemanager启动 A p p l i c a t i o n Application Application M a s t e r Master Master来管理这个 j o b job job。
- A p p l i c a t i o n Application Application M a s t e r Master Master向 R e s o u r c Resourc Resource S c h e d u l e r Scheduler Scheduler申请资源和指令。
- R e s o u c e Resouce Resouce S c h e d u l e r Scheduler Scheduler把需要用到的资源和指令封装发送给 A p p l i c a t i o n Application Application M a s t e r Master Master
- A p p l i c a t i o n Application Application M a s t e r Master Master 将获取到的资源分配给各个 n o d e m a n a g e r nodemanager nodemanager, n o d e m a n a g e r nodemanager nodemanager根据资源和指令启动 M a p T a s k MapTask MapTask任务
- M a p T a s k MapTask MapTask任务运行完成后给 A p p l i c a t i o n Application Application M a s t e r Master Master进行汇报
- A p p l i c a t i o n Application Application M a s t e r Master Master通知 R e d u c e T a s k ReduceTask ReduceTask去 M a p T a s k MapTask MapTask中拉取数据
- R e d u c e T a s k ReduceTask ReduceTask去所有的 M a p T a s k MapTask MapTask中拉取自己分区的数据,进行聚合。
- R e d u c e T a s k ReduceTask ReduceTask运算完成后,给 A p p l i c a t i o n Application Application M a s t e r Master Master汇报结果
- A p p l i c a t i o n Application Application M a s t e r Master Master再把计算结果汇总到 A p p l i c a t i o n Application Application M a n a g e r Manager Manager中。
1.3 组件介绍
- A p p l i c a t i o n Application Application M a n a g e r Manager Manager :整个 Y A R N YARN YARN中所有应用的管理者
-
R
e
s
o
u
r
c
e
Resource
Resource
S
c
h
e
d
u
l
e
r
Scheduler
Scheduler:负责整个
Y
A
R
N
YARN
YARN集群的资源分配
- 返回信息是 C o n t a i n e r Container Container
- 这个程序由哪些机器执行,每台机器能使用的内存和 C P U CPU CPU,每台机器要执行的指令任务
-
A
p
p
l
i
c
a
t
i
o
n
Application
Application
M
a
s
t
e
r
Master
Master :负责管理运行的程序
- 资源的申请和向所有 n o d e m a n a g e r nodemanager nodemanager分配计算任务
- 监控所有的
M
a
p
T
a
s
k
MapTask
MapTask和
r
e
d
u
c
e
T
a
s
k
reduceTask
reduceTask,保证所有的
T
a
s
k
Task
Task都运行成功过
- 如果由 T a s k Task Task失败,会重新分配这个任务。
1.4 Y A R N YARN YARN的资源分配配置
资源分配由配置再 y a r n − s i t e . x m l yarn-site.xml yarn−site.xml的参数决定
配置属性 | 含义 | 默认值 |
---|---|---|
y a r n . n o d e m a n a g e r . r e s o u r c e . m e m o r y − m b yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.memory−mb | 每台 N o d e M a n g e r NodeManger NodeManger能够使用的最大物理内存数 | 8192 M 8192M 8192M |
y a r n . n o d e m a n a g e r . r e s o u r c e . c p u − v c o r e s yarn.nodemanager.resource.cpu-vcores yarn.nodemanager.resource.cpu−vcores | 每台 N o d e M a n g e r NodeManger NodeManger能够使用的最大物理 C P U CPU CPU核数 | 8 8 8个 |
y a r n . s c h e d u l e r . m i n i m u m − a l l o c a t i o n − m b yarn.scheduler.minimum-allocation-mb yarn.scheduler.minimum−allocation−mb | 每个应用最少申请的内存 | 1024 M 1024M 1024M |
y a r n . s c h e d u l e r . m a x i m u m − a l l o c a t i o n − m b yarn.scheduler.maximum-allocation-mb yarn.scheduler.maximum−allocation−mb | 每个应用最多申请的内存 | 8192 M 8192M 8192M |
y a r n . s c h e d u l e r . m i n i m u m − a l l o c a t i o n − v c o r e s yarn.scheduler.minimum-allocation-vcores yarn.scheduler.minimum−allocation−vcores | 每个应用最少申请的 C P U CPU CPU核数 | 1 1 1个 |
y a r n . s c h e d u l e r . m a x i m u m − a l l o c a t i o n − v c o r e s yarn.scheduler.maximum-allocation-vcores yarn.scheduler.maximum−allocation−vcores | 每个应用最多申请的 C P U CPU CPU核数,这个值一般等于最大申请内存的 G B GB GB值 | 32 32 32 |
y a r n . n o d e m a n a g e r . v m e m − p m e m − r a t i o yarn.nodemanager.vmem-pmem-ratio yarn.nodemanager.vmem−pmem−ratio | 虚拟内存和真实物理内存的比率 | 2.1 2.1 2.1 |
y a r n . n o d e m a n a g e r . p m e m − c h e c k − e n a b l e d yarn.nodemanager.pmem-check-enabled yarn.nodemanager.pmem−check−enabled | 关闭物理内存检查 | f a l s e false false |
y a r n . n o d e m a n a g e r . v m e m − c h e c k − e n a b l e d yarn.nodemanager.vmem-check-enabled yarn.nodemanager.vmem−check−enabled | 关闭虚拟内存检查 | f a l s e false false |
1.5 YARN的任务调度
-
F I F O FIFO FIFO:先进先出
- 单队列实现,单个队列拥有整个 Y A R N YARN YARN的所有资源
- 程序先提交就享有当前所有的资源,只有等当前程序运行结束,后面的下一个程序才开始运行
-
C a p a c i t y Capacity Capacity:容量调度 < A p a c h e 默 认 的 调 度 机 制 > <Apache默认的调度机制> <Apache默认的调度机制>
- 多队列的并行,每个队列内部还是 F I F O FIFO FIFO
- 为每个队列分配固定的资源,当程序运行时,提交到那个队列,就享有这个队列的所有资源
- 资源动态抢占,当前的队列资源不足的时候,其他队列资源空闲,可以进行调用。
- y a r n − s i t e . x m l yarn-site.xml yarn−site.xml的参数为: y a r n . r e s o u r c e m a n a g e r . s c h e d u l e r . c l a s s yarn.resourcemanager.scheduler.class yarn.resourcemanager.scheduler.class,参数值为: o r g . a p a c h e . h a d o o p . y a r n . s e r v e r . r e s o u r c e m a n a g e r . s c h e d u l e r . c a p a c i t y . C a p a c i t y S c h e d u l e r org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
-
F a i r Fair Fair:公平调度 < C D H 版 本 默 认 的 调 度 机 制 > <CDH版本默认的调度机制> <CDH版本默认的调度机制>
- 多队列并行的,并且每个队列内部是可以进行程序并发,队列中的资源共享。
- 支持资源抢占
- 可以分配队列的优先级
- y a r n − s i t e . x m l yarn-site.xml yarn−site.xml的参数为: y a r n . r e s o u r c e m a n a g e r . s c h e d u l e r . c l a s s yarn.resourcemanager.scheduler.class yarn.resourcemanager.scheduler.class,参数值为: o r g . a p a c h e . h a d o o p . y a r n . s e r v e r . r e s o u r c e m a n a g e r . s c h e d u l e r . f a i r . F a i r S c h e d u l e org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedule org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedule
-
公平调度对应的参数
属性名称 含义 值 y a r n . s c h e d u l e r . f a i r . a l l o c a t i o n . f i l e yarn.scheduler.fair.allocation.file yarn.scheduler.fair.allocation.file 指定公平调度的配置文件 e t c / h a d o o p / f a i r − s c h e d u l e r . x m l etc/hadoop/fair-scheduler.xml etc/hadoop/fair−scheduler.xml y a r n . s c h e d u l e r . f a i r . u s e r − a s − d e f a u l t − q u e u e yarn.scheduler.fair.user-as-default-queue yarn.scheduler.fair.user−as−default−queue 没有指定队列名时,是否使用用户名作为队列名称 t r u e true true y a r n . s c h e d u l e r . f a i r . p r e e m p t i o n yarn.scheduler.fair.preemption yarn.scheduler.fair.preemption 是否允许资源抢占 t r u e true true y a r n . s c h e d u l e r . f a i r . p r e e m p t i o n . c l u s t e r − u t i l i z a t i o n − t h r e s h o l d yarn.scheduler.fair.preemption.cluster-utilization-threshold yarn.scheduler.fair.preemption.cluster−utilization−threshold 最大抢占比例 0.8 0.8 0.8 y a r n . s c h e d u l e r . f a i r . s i z e b a s e d w e i g h t yarn.scheduler.fair.sizebasedweight yarn.scheduler.fair.sizebasedweight 是否启用权重 t r u e true true y a r n . s c h e d u l e r . f a i r . a s s i g n m u l t i p l e yarn.scheduler.fair.assignmultiple yarn.scheduler.fair.assignmultiple 是否允许分配多个container t r u e true true y a r n . s c h e d u l e r . f a i r . m a x . a s s i g n yarn.scheduler.fair.max.assign yarn.scheduler.fair.max.assign 如果允许,最多分配多少个 20 20 20 y a r n . s c h e d u l e r . f a i r . l o c a l i t y . t h r e s h o l d . n o d e yarn.scheduler.fair.locality.threshold.node yarn.scheduler.fair.locality.threshold.node 放弃等待优先本地计算的节点比例,-1表示都不放弃 − 1 -1 −1 y a r n . s c h e d u l e r . f a i r . l o c a l i t y . t h r e s h o l d . r a c k yarn.scheduler.fair.locality.threshold.rack yarn.scheduler.fair.locality.threshold.rack 放弃等待优先机架计算的节点比例,-1表示都不放弃 − 1 -1 −1 y a r n . s c h e d u l e r . f a i r . a l l o w − u n d e c l a r e d − p o o l s yarn.scheduler.fair.allow-undeclared-pools yarn.scheduler.fair.allow−undeclared−pools 是否允许创建未定义的队列 t r u e true true y a r n . s c h e d u l e r . f a i r . u p d a t e − i n t e r v a l − m s yarn.scheduler.fair.update-interval-ms yarn.scheduler.fair.update−interval−ms 表示重新计算公平调度的间隔,单位毫秒 500 500 500 - 公平调度对应的配置文件
<?xml version="1.0"?> <allocations> <queue name="sample_queue"> <minResources>10000 mb,0vcores</minResources> <maxResources>90000 mb,0vcores</maxResources> <maxRunningApps>50</maxRunningApps> <maxAMShare>0.1</maxAMShare> <weight>2.0</weight> <schedulingPolicy>fair</schedulingPolicy> <queue name="sample_sub_queue"> <aclSubmitApps>charlie</aclSubmitApps> <minResources>5000 mb,0vcores</minResources> </queue> </queue> <queueMaxAMShareDefault>0.5</queueMaxAMShareDefault> <!—- Queue 'secondary_group_queueue' is a parent queue and may have user queues under it --> <queue name="secondary_group_queue" type="parent"> <weight>3.0</weight> </queue> <user name="sample_user"> <maxRunningApps>30</maxRunningApps> </user> <userMaxAppsDefault>5</userMaxAppsDefault> <queuePlacementPolicy> <rule name="specified" /> <rule name="primaryGroup" create="false" /> <rule name="nestedUserQueue"> <rule name="secondaryGroupExistingQueue" create="false" /> </rule> <rule name="default" queue="sample_queue"/> </queuePlacementPolicy> </allocations> ```