zoukankan      html  css  js  c++  java
  • Spark源码走读2——Spark Submit

    这里主要说明作业提交的过程源码。SparkSubmit在org.apache.spark.deploy中,submit是一个单独的进程,首先查看它的main方法:


    createLaunchEnv方法中设置了一些配置参数:如返回值、集群模式、运行环境等。这里主要查看Client的集群模式。下面看下作业提交序列图:


    Client

    Client的启动方法preStart。


    Client是一个actor,Client提交任务,首先需要封装好DriverDescription参数。包括jar文件url、momory、cpu cores等。然后向Master发送RequestSubmitDriver消息。

    Master

    Master中接收RequestSubmitDriver消息的处理:


    这里主要看下schedule这个方法:




    上面源码中。主要看;两个方法launchDriver、launchExecutor

    launchDriver

    launchDriver:是让worker来启动driver


    launchExecutor


    Worker

    Master向Worker发送了LaunchDriver和LaunchExecutor。这里在就跟踪Worker下怎么处理Master发送的这两个消息。

     LaunchDriver启动driver


    这里启动了driver。而它在启动的时候 就是创建目录然后下载jar包然后记载一些参数,最后向work发送worker !DriverStateChanged(driverId, state, finalException)。Worker接收到DriverStateChanged后将消息发给Master。最后Master接收到这个消息,则移除driver

    LaunchExecutor

    Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程


    这里真正的执行方法在ExecutorRunner中的fetchAndRunExecutor方法中。

     接下来从一张流程图中简要描述了作业提交的流程。


    1)客户端启动后直接运行用户程序,启动Driver相关的工作:DAGScheduler和BlockManagerMaster等。

    2)客户端的Driver向Master注册。

    3)Master会让Worker启动Exeuctor。

    4)Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。 ExecutorBackend启动后会向Driver的SchedulerBackend注册。

    5)Driver的DAGScheduler解析作业并生成相应的Stage,每个Stage包含的Task通过TaskScheduler分配给Executor执行。 所有stage都完成后作业结束。



  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/huwf/p/4273378.html
Copyright © 2011-2022 走看看