美文网首页
Spark提交流程

Spark提交流程

作者: 你值得拥有更好的12138 | 来源:发表于2020-04-10 16:36 被阅读0次

    转载:https://www.cnblogs.com/frankdeng/p/9301485.html
    转载:http://www.imooc.com/article/253664

    1、Driver端会调用SparkSubmit类(内部执行submit->doRunMain->通过反射
    获取应用程序的主类对象->执行主类的main方法)

    2、构建sparkConf和sparkContext对象,在sparkContext入口做了三件事,创建
    了sparkEnv对象(创建了ActorSystem对象)TaskScheduler(用来生成并发送

    task给Executor)DAGScheduler(用来划分Stage)

    3、clientActor将任务封装到ApplicationDescription对象并且提交给Master

    4、Master收到任务信息后,将任务信息存到内存中,同时放到队列中(waitingApp)

    5、任务信息开始执行后,调用schedule方法,进行资源的调度。

    6、将调度好的资源封装到LaunchExecutor并发送给对应的worker。

    7、worker接收到master发送来的任务调度信息(LaunchExecutor),将信息封装

    成一个ExecutorRunner对象。

    8、封装成ExecutorRunner后,调用ExecutorRunner的·start方法,开始启动GoarseGrainedExecutorBackend对象

    9、Executor启动后DriverActor进行反向注册。

    10、与DriverActor注册成功后,创建一个线程池(TreadPool)用来执行任务

    11、当所有的Executor注册完成后,意味着作业环境准备好了,Driver端会结束与

    sparkContext对象的初始化。

    12、当Driver初始化完成后(创建一个sc实例)会继续执行我们自己提交的App

    代码,当触发了action算子时就会触发一个job,这时就会调用DAGScheduler对象

    进行Stage划分。

    13、DagScheduler开始进行stage划分。

    14、将划分好的stage按照分区生成一个一个的task,并且封装到TaskSet对象中

    然后TaskSet提交到TaskScheduler

    15、TaskScheduler按照提交过来的TaskSet,拿到一个序列化器,将TaskSet序列化

    ,将序列化好的Task封装到LaunchExecutor并且提交到DriverActor。

    16、DriverActor把LauchExcutor发送到Excutro上。

    17、Executor接收到DriverActor发送过来的任务(LaunchExecutro),会将其封装成为

    TaskRunner,然后从线程池中获取线程来执行TaskRunner。

    18、TaskRunner拿到反序列化器,反序列Taskset,然后执行App代码,也就是对

    RDD分区上执行的算子和自定义函数。

    ClientActor:负责和Master通信,向Master注册任务信息

    DriverActor:负责和Executor进行通信,接收到 Executor反向注册和把任务发送到Executer。

    StandAlone模式

    image.png

    yarn -client模式

    image.png

    yarn-cluster模式

    image.png

    相关文章

      网友评论

          本文标题:Spark提交流程

          本文链接:https://www.haomeiwen.com/subject/kearmhtx.html