Spark基本组件,Master和Worker,负责运行Client和Driver
每个SparkApplication由主控节点Master、集群资源管理节点ClusterManager、执行任务节点Worker和执行单元Executor、负责提交作业的Client、负责作业控制的Driver组成的
SparkContext是应用程序和集群交互的唯一通道,包括:获取数据、交互操作、分析和构建DAG图、通过Scheduler调度任务、Block跟踪、Shuffle跟踪
提交作业有两种方式
Driver运行在集群中和运行在客户端,无论哪种方式,概念是一致的
Stage(根据Shuffle划分Stage)
Task(一个Stage包含多个Task,实现并行)
DAGScheduler(将作业分解成Stage,执行Task数量,生成TaskSet放到TaskScheduler)
基于Standalone模式
各进程角色如下
Master:主控节点,接收Client提交的作业,管理Worker,命令Worker启动Driver和Executor
Worker:Slave节点,管理节点上的资源,定期向Master心跳汇报,接收Master命令
Client:客户端进程,提交作业到Master
Driver:Spark作业的主进程,负责DAG构建、Stage划分、Task管理和调度,包含多个组件
Executor:执行作业,一个Executor可以执行多个Task,每个Worker只能启动一个Executor
客户端提交应用程序给Master,指定一个Worker启动Driver,然后让其他Worker启动Executor,由Driver触发Executor启动Task执行
故障解决方案
Worker故障
Worker退出前会将Worker上的Executor杀掉,Master可以通过心跳感应到Worker故障,通知给Driver移除Worker节点
Executor故障
ExecutorRunner汇报给Worker,传递给Master,Master发送LanuchExecutor指令给Worker重新启动Executor
Master故障
通过Zookeeper搭建Master的HA,一个作为Active,其他作为Standby,Active节点故障能够及时切换
基于YARN模式
SparkAppMaster相当于Driver
客户端生成作业信息,提交给ResourceManager,在与NodaManager通信时把AppMaster分配给NodeManager,启动SparkAppMaster。初始化作业并向ResourceManager申请资源后SparkAppMaster通过RPC让NodeManager启动相应的SparkExecutor。SparkClient通过AppMaster获取作业运行状态
作业调度
整个作业调度分为:生成RDD对象、构建DAGScheduler、任务调度、作业执行
生成RDD对象,根据输入RDD进行解析,构建DAG图。代码中的RDD进行转换操作是惰性的,只会产生标记不会立即执行。只有遇到执行操作时调用runJob方法提交至DAGScheduler,程序真正执行
构建DAGScheduler过程中,根据DAG划分Stage,提交任务集。首先将DAG划分成一个完整的Stage,从最后一个RDD往前回溯,不断判断RDD的依赖关系,如果是窄依赖则继续回溯,宽依赖则划分出一个新的Stage
任务调度过程中,通过集群管理器分配资源启动具体任务,并重试失败或运行较慢的任务
作业执行过程,执行任务,存储并管理数据块