Yarn、Spark架构及其对比
Yarn、Spark架构比对与执行流程
YARN的架构
-
ResourceManager: RM 资源管理器
- 整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度
- 处理客户端的请求: submit, kill
- 监控我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理
-
NodeManager: NM 节点管理器
- 整个集群中有多个,负责自己本身节点资源管理和使用
- 定时向RM汇报本节点的资源使用情况
- 接收并处理来自RM的各种命令:启动Container
- 处理来自AM的命令
-
ApplicationMaster: AM
- 每个应用程序对应一个:MR、Spark,负责应用程序的管理
- 为应用程序向RM申请资源(core、memory),分配给内部task
- 需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面
- Container 容器: 封装了CPU、Memory等资源的一个容器,是一个任务运行环境的抽象
- Client: 提交作业 查询作业的运行进度,杀死作业
Yarn执行流程
-
Client提交作业请求
-
ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个Container(容器),并将 ApplicationMaster 分发到这个容器上面
-
在启动的Container中创建ApplicationMaster
-
ApplicationMaster启动后向ResourceManager注册进程,申请资源
-
ApplicationMaster申请到资源后,向对应的NodeManager申请启动Container,将要执行的程序分发到NodeManager上
-
Container启动后,执行对应的任务
-
Tast执行完毕之后,向ApplicationMaster返回结果
-
ApplicationMaster向ResourceManager 请求kill
spark 架构(Standalone模式)
-
Application
用户自己写的Spark应用程序,批处理作业的集合。Application的main方法为应用程序的入口,用户通过Spark的API,定义了RDD和对RDD的操作。
-
Client:客户端进程,负责提交作业到Master。
-
Master(类比与ResourceManager)
- Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动Driver和Executor。
-
Worker(类比于NodeManager)
- Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。
-
Driver(类比于ApplicationMaster)
- 一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
- DAGScheduler: 实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。
- TaskScheduler:实现Task分配到Executor上执行。
- Stage:一个Spark作业一般包含一到多个Stage。
- Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。
-
Executor(类比于Container):即真正执行作业的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一到多个Task。