面试|spark模块 - spark的工作流程?

spark的工作流程?

回答思路

所有spark程序都离不开程序初始化执行任务这两部分,所以该问题可以从这两部分开始回答。

一、程序初始化的流程

  1. 用户通过sparksubmit提交程序以后,driver程序开始运行(driver程序就是运行起来的提交的程序,可以理解为spark的main程序)。
  2. driver程序运行起来会首先初始化sparkContext。
  3. 在SparkContext对象中做的最重要的事情就是构造出一个DAGSchedule和一个TaskScheduler。
  4. 上述的TaskScheduler构建出来以后,通过它的一个后台进程去向spark的Master节点注册该driver对应的application,此时该application也附带了该spark程序所需要的资源信息。
  5. Master接收到这个Application的时候,会根据application所需要的资源,从自己的work节点启动对应的Executor进程。
  6. 当worker节点中的Executor进程启动起来之后,会反向注册到TaskScheduler上面,通知TaskScheduler,我已经准备好了,可以干活了。
  7. 至此,new sparkcontext()初始化完毕,TaskScheduler已经拿到了Executor资源。

二、任务执行的流程

  1. 先进行Job及Stage的切分,当程序每读到action的时候,DAGScheduler开始切分Job,根据宽窄依赖切分Stage,然后封装成TaskSet,将TaskSet发送给TaskScheduler,一个TaskSet对应一个Stage,一个Stage在对应的一个job里面。
  2. 发送task到执行进程,当TaskSchedule拿到TaskSet以后,会将TaskSet打散,变成一个个的task,TaskScheduler会把Taskset里面每一个Task提交到分配的Executor中去执行。
  3. task开始执行,当Executor接收到Task一块,会启动一个TaskRunner,将Task封装起来,TaskRunner会从线程池中拿一个线程会运行这个task。

公号:guowei

——专注于大数据面试讲解,致力于用最简洁的语言把解题思路讲清楚。

面试|spark模块 - spark的工作流程?_第1张图片

你可能感兴趣的:(大数据,spark,面试,java)