YARN产生背景
Hadoop1.x
时:
MapReduce:Master/Slaver
架构,1个JobTracker
JobTracker
:负责资源管理和作业调度
TaskTracker
:
定期向JT
汇报本节点的健康状况、资源使用情况、作业执行情况
接受来自JT
的命令:启动任务/杀死任务
MapReduce1.x
存在的问题:
- 单点故障&节点压力不易扩展&不能够支持除了MapReduce的其它计算
- 资源利用率&运维成本
催生了YARN
的诞生:不同的计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度
XXX on YARN
的好处:与其他计算框架共享集群资源,按资源需要分配,进而提高集群资源利用率
XXX:Spark/MapReduce/Storm/Flink
YARN架构
ResourceManager:RM
- 整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度
- 处理客户端的请求:提交一个作业、杀死一个作业
- 监督我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理
NodeManager:NM
- 整个集群中有多个,负责自己本身节点资源管理和使用
- 定时向RM汇报本节点的资源使用情况
- 接受并处理来自RM的各种命令:启动Continuer
- 处理来自AM的命令
- 单个节点的资源管理
ApplicationMaster:AM
- 每个应用程序对应一个:
MR
、Spark
,负责应用程序的管理
- 为应用程序向RM申请资源(core、memory),分配给内部task
- 需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面
Container
- 封装了
CPU、Memory
等资源的一个容器
- 是一个任务运行环境的抽象
Client
- 提交作业
- 查询作业的运行进度
- 杀死作业
YARN执行流程
- 客户端向
RM
提交作业
- 作业提交到
RM
之后,RM
会与对应的NM
通信,为该作业分配第一个Container
(可以理解为一个作业对应于很多个task
,每个task
是存在于不同的NM
上,运行在NM
上的Container
上;一个作业对应于一个AM
)。
NM
在Container
上启动应用程序的AM(由于一个作业会对应一个AM
,所以该Container
要做的第一件事就是运行该作业对应的AM
)
AM
向RM
注册,从而使得用户能够通过RM
查询到作业的运行情况。然后,AM
将会向RM
为各个任务申请资源,并监控运行情况。
AM
申请到资源以后,和对应的NM
通信,要求NM
启动任务
NM
启动作业对应的task
应用运行结束后,
ApplicationMaster
向ResourceManager
注销自己,允许其所属的Container
回收。