spark的工作流程是什么
回答思路
所有spark程序都离不开程序初始化和执行任务这两部分,所以该问题可以从这两部分开始回答。
一、程序初始化的流程
-
用户通过sparksubmit提交程序以后,driver程序开始运行(driver程序就是运行起来的提交的程序,可以理解为spark的main程序)。
-
driver程序运行起来会首先初始化sparkContext。
-
在SparkContext对象中做的最重要的事情就是构造出一个DAGSchedule和一个TaskScheduler。
-
上述的TaskScheduler构建出来以后,通过它的一个后台进程去向spark的Master节点注册该driver对应的application,此时该application也附带了该spark程序所需要的资源信息。
-
Master接收到这个Application的时候,会根据application所需要的资源,从自己的work节点启动对应的Executor进程。
-
当worker节点中的Executor进程启动起来之后,会反向注册到TaskScheduler上面,通知TaskScheduler,我已经准备好了,可以干活了。
-
至此,new sparkcontext()初始化完毕,TaskScheduler已经拿到了Executor资源。
二、任务执行的流程
-
先进行Job及Stage的切分,当程序每读到action的时候,DAGScheduler开始切分Job,根据宽窄依赖切分Stage,然后封装成TaskSet,将TaskSet发送给TaskScheduler,一个TaskSet对应一个Stage,一个Stage在对应的一个job里面。
-
发送task到执行进程,当TaskSchedule拿到TaskSet以后,会将TaskSet打散,变成一个个的task,TaskScheduler会把Taskset里面每一个Task提交到分配的Executor中去执行。
-
task开始执行,当Executor接收到Task一块,会启动一个TaskRunner,将Task封装起来,TaskRunner会从线程池中拿一个线程会运行这个task。
公众号搜索 guowei
——专注于大数据面试讲解,致力于用最简洁的语言把解题思路讲清楚。