spark作业的整体执行流程

spark作业的执行流程

Spqrk 作业的整体执行过程:
1:启动spark集群,就是spark的start-all.sh脚本来启动spark中的master和worker节点启动了一个
对应的master进程和worker进程
2:当worker进程启动起来之后 向master进程发送注册信息,所以worker是一个基于AKKA,actor的事件驱动模型
master也是一个基于AKKA Actor的事件驱动模型
3:当worker向master注册成功之后,worker要不断的向master发送心跳包,去监听主节点是否存在,就是基于
AKKA Actor的事件驱动模型
4:Driver向spark集群提交作业,就是向master提交作业,其实说白了就是通过基于AKKA Actor的事件驱动模型
向我们的master发送一个RegisterApplication的case class,注册我们的spark应用需要的资源。说白了就是
向master申请运行程序所需要的资源
5:master其实就是一个基于AKKA Actor的事件驱动模型进程,当收到Driver提交的作业请求之后向worker节点
指派相应的作业任务。就是在对应的worker节点上启动对应的executor进程
6:当worker节点接收到master节点启动executor任务之后就启动对应的executor进程,向master汇报启动成功
,可以接收任务
7:当executor进程启动之后,就向driver进程反向注册,基于AKKA Actor的事件驱动模型,告诉Driver
谁可以接收任务,执行spark作业、
8:Driver接收到注册之后,就知道了向谁发送spark作业,那么这样在spark集群中就有一组独立的executor
进程为该driver服务
9:该sparkcontext中非常核心的组件出场了–DAGScheduler,DAGScheduler根据我们编写的spark作业逻辑
将spark作业分成若干个阶段stage然后为每一个阶段组装一批task组成taskset;然后将这些
DAGScheduler组装好的taskset交给taskscheduler,由taskscheduler将这些任务分发给对应的executor
10:当executor进程接收到driver发送过来的taskset之后 进行反序列化,然后将这些task封装进一个
叫taskrunner的线程中,然后放到本地线程池中,调度我们的作业执行

你可能感兴趣的:(spark,spark作业执行流程)