Spark基础核心概念
Spark 任务提供多层分解的概念,Spark 组件将用户的应用程序分解为内部执行任务并提供执行容器,资源管理为 Spark 组件提供资源管理和调度。
应用程序(Application):
- 应用程序(Application):由一个 Driver Program 和多个 Job 构成。
- 作业(Job): RDD 中由 Action 操作所生成的一个或多个调度阶,即由多个 Stage 组成。
- 调度阶段(Stage):也叫作任务集(Task Set),因 RDD 之间依赖关系拆分成多组任务集合。任务(Task):分发到 Executor 上的工作任务,任务最小的工作单元。
- 执行器(Executor):真正执行 Task 的单元,一个 Worker Node/NM 上可以有多个 Executor。
- DAG Scheduler:面向调度阶段的任务调度器。负责接收 Spark 应用提交的作业,根据 RDD 的依赖关系划分调度阶段,并提交调度阶段给 Task Scheduler。
- Task Scheduler:面向任务的调度器,接受 DAG Scheduler 提交过来的调度阶段,然后把任务分发到 Work 节点运行,由 Work 节点的 Executor 来运行该任务。
- Driver Program(驱动程序):构建 Spark Context、将 Job 转换为 DAG 图、将DAG 图划分为多个 Stage,从而根据分区生成 Task、根据 Task 要求向资源管理器申请资源、提交任务并检测任务状态。
- RM( Resource Manager ) : 全局资源管理器,负责集群统一的资源管理、调度、分配等。
处理客户端请求,例如客户端提交应用程序 Job。
启动 AM、监控 AM 运行状态并在失败时重启它。
监控 NM,获取 NM 资源使用情况和各个 Container 运行状态。
- NM( Node Manager ) : 单个节点上的资源和任务管理器。
处理来自 RM 的命令,向 RM 汇报本节点上的资源使用情况和各个 container 的运行状态。
处理来自 AM 的命令,例如处理来自 AM 的 container 启动/停止等各种请求。
- AM(Application Master ) : 负责每个 Job 生命周期内的所有工作。
与 RM 调度器协商以获取资源(用 container 表示) 。将得到的任务资源进一步分配给内部的任务 Task 。
与 NM 通信以启动/停止任务 。
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以启动任务。
Spark On Yarn模式
基于Yarn提交Spark任务有以下两种模式
Yarn-Client模式: Driver运行在Client上,如下图:
(1) 客户端启动后直接运行应用程序,直接启动 Driver。
(2) Driver 初始化并生成一系列 Task。
(3) 客户端将 App Commands 发布到 Yarn。
(4) AM 为该 Job 在某个 NM 上分配一个 AM。
(5) AM 向 RM 申请资源,RM 返回 Executor 信息。
(6) AM 通过 RPC 启动相应的 Executor。
(7) Executor 启动后向 Driver 注册。
(8) Driver 向 Executor 分配 Task。
(9) Executor 执行结果写入文件或返回 Driver。
Yarn-Cluster模式: Driver运行在AM上,如下图
(1) 客户端把作业提交到 Yarn。
(2) RM 为该 Job 在某个 NM 上分配一个 AM,NM 启动 App Master,AppMaster 启动 Driver。
(3) AM 启动后完成初始化作业,Driver 生成一系列 Task。
(4) AM 向 RM 申请资源,RM 返回 Executor 信息。
(5) AM 通过 RPC 启动相应的 Executor。
(6) Driver 向 Executor 分配 Task。
(7) Executor 执行结果写入文件或返回 Driver。
Spark作业基本运行原理:https://blog.csdn.net/chenjieit619/article/details/53421080