原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html

  为了更深入的了解spark,现开始对spark源码进行分析,本系列文章以spark 1.0.0版本源码作为分析对象。今天主要分析下standalone部署方式的启动过程  

  1、Spark Standalone组件

    Standalone部署方式是一种典型master-slave模式,在这种模式下主要包含三个组件:Master(Cluster Manager)、Worker(slave)、Driver(client)

    

    在spark的sbin目录中start-master.sh、start-slave.sh脚本就是用来启动Master、Worker的

      

  2、Master启动分析

    先看看start-master.sh脚本,里面有默认的IP、PORT值。主要调用了org.apache.spark.deploy.master.Master类

    

      在Master类中利用了Akka框架来创建Actor对象

      

    利用actorOf初始化Master对象后,就是回调Master中的preStart方法(Akka的Actor对象一旦被初始化就会回调preStart方法)

      

    preStart方法中启动了Spark WebUI服务、MetricsSystem(流式计算相关的)服务等

      

  3、Worker启动分析

    在start-slave.sh脚本中调用了org.apache.spark.deploy.worker.Worker类来启动Worker进程

      

    在Worker类中同样采用AkkaUtils来创建一个Actor 

     

    下面看看Worker的preStart方法,它的调用链preStart->registerWithMaster->tryRegisterAllMasters,最终调用了tryRegisterAllMasters来注册到Master。

      actorSelection()函数连接Master,并调用了Master的RegisterWorker服务

     

  4、driver启动分析

      以spark-shell启动为例进行分析,在spark-shell中又调用了spark-submit,而在spark-submit中调用了spark-class

    执行org.apache.spark.deploy.SparkSubmit,-class参数 org.apache.spark.repl.Main

    

     

    下图分析SparkSubmit类后续的执行过程,通过一步一步跟踪,它最终会调用到ClientActor类。

      

     在ClientActor类的preStart方法中就会发起注册Master,并调用了Master的RegisterApplication服务    

     

  

  5、Master-Worker-Driver交互分析

    当Worker、Driver启动后都会向Master发送消息进行登记注册,下图为在启动过程中Master、Driver、Worker之间的信息交互

      1、Master、Worker启动后,Worker会向Master发ResisterWorker消息进行注册登记,Master负责记录Worker相关信息后回复RegisteredWorker消息

      2、Driver启动会向Master发送RegisterApplication消息,登记Spark应用相关信息,Master记录Application注册信息后回复RegisteredApplication消息

      3、Master发送LauchDriver消息通知Worker,Driver已经启动。Worker收到消息后会记录Driver相关信息并回复DriverStateChanged消息

      4、Master发送LauchExecutor消息通知Worker为Application分配Executor计算资源。分配成功后Worker会发送RegisterExecutor消息告诉Driver,为Application

         分配的资源信息

      5、ExecutorAdd、ExecutorUpdated、ExecutorStateChanged消息是Master、Worker、Driver之间同步Executor最新信息。

      

    具体代码实现中,当调用Master的服务后,Master的receive函数就负责分发与处理不同服务。

    receive里面很多case语句,就是针对不同的服务进行响应处理的

    RegisterWorker服务中创建了WorkInfo来管理Worker的连接信息

     

    RegisterApplication服务中创建了ApplicationInfo来管理Appcation的连接信息

      

    至此,分析完了Driver、Master、Worker启动建立连接的过程,里面很多细节没有详细分析,大家可以自行阅读相关代码。

原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html

Spark源码分析(一)-Standalone启动过程的更多相关文章

  1. Spark 源码分析 -- task实际执行过程

    Spark源码分析 – SparkContext 中的例子, 只分析到sc.runJob 那么最终是怎么执行的? 通过DAGScheduler切分成Stage, 封装成taskset, 提交给Task ...

  2. tomcat8 源码分析 | 组件及启动过程

    tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...

  3. Netty源码分析之客户端启动过程

    一.先来看一下客户端示例代码. public class NettyClientTest { public void connect(int port, String host) throws Exc ...

  4. wxWidgets源码分析(1) - App启动过程

    目录 APP启动过程 wxApp入口定义 wxApp实例化准备 wxApp的实例化 wxApp运行 总结 APP启动过程 本文主要介绍wxWidgets应用程序的启动过程,从app.cpp入手. wx ...

  5. Hive源码分析(1)——HiveServer2启动过程

    1.想了解HiveServer2的启动过程,则需要找到启动HiveServer2的入口,hive服务的启动命令为hive --service HiveServer2,通过分析$HIVE_HOME/bi ...

  6. Spark源码分析之Checkpoint的过程

    概述 checkpoint 的机制保证了需要访问重复数据的应用 Spark 的DAG执行图可能很庞大,task 中计算链可能会很长,这时如果 task 中途运行出错,那么 task 的整个需要重算非常 ...

  7. Spark源码分析 – 汇总索引

    http://jerryshao.me/categories.html#architecture-ref http://blog.csdn.net/pelick/article/details/172 ...

  8. spark 源码分析之四 -- TaskScheduler的创建和启动过程

    在 spark 源码分析之二 -- SparkContext 的初始化过程 中,第 14 步 和 16 步分别描述了 TaskScheduler的 初始化 和 启动过程. 话分两头,先说 TaskSc ...

  9. Spark源码分析(三)-TaskScheduler创建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3879151.html 在SparkContext创建过程中会调用createTaskScheduler函 ...

  10. 【转】Spark源码分析之-deploy模块

    原文地址:http://jerryshao.me/architecture/2013/04/30/Spark%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B- ...

随机推荐

  1. 扒一扒编辑距离(Levenshtein Distance)算法

    最近由于工作需要,接触了编辑距离(Levenshtein Distance)算法.赶脚很有意思.最初百度了一些文章,但讲的都不是很好,读起来感觉似懂非懂.最后还是用google找到了一些资料才慢慢理解 ...

  2. SQL-LINQ-Lambda语法对照,好记性不如烂笔头

    忘记的时候就翻阅翻阅吧~~ SQL LINQ Lambda SELECT *FROM HumanResources.Employee from e in Employees select e Empl ...

  3. JAVA事务

    一.什么是事务 我们通常会认为事务与数据库有关. 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的操作.事务的正确执行使得数据库从一种状态转换成另外一种状态. 事务必须服从IS ...

  4. C++ 学习笔记(一)

    只是记录自己学习C++ 笔记实例来自<c++ primer> 1.static: static 局部对象确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化.这种对象一旦被创建, ...

  5. 安装ubuntu时将boot目录单独挂载的意义

    只有一个意义那就是当你的情况是:单个硬盘里面安装多个系统. 如果不是这样,就别动它.

  6. svn版本控制器在vs2013中的使用

      下面记录常用的几种用法:   a) SVN检出 将SVN服务端所保存的数据下载到个人工作平台. 组长上传初始项目后,各组员可以到服务器上检出项目 1. 打开Visual Studio 2010-& ...

  7. Android -- 系统信息(内存、cpu、sd卡、电量、版本)获取

    内存(ram)                                                                              android的总内存大小信息 ...

  8. 软件工程随堂小作业——随机四则运算Ⅱ之算法思路(C++)

    1.题目避免重复: (1)利用系统时间来产生随机数,重复率会降低. (2)建立链表,逐个判断.可读取写入文件. 2.可定制(数量/打印方式): (1)格式有默认值; (2)可以选择重新设置分几列和每行 ...

  9. js数组排序

    在JS中,sort方法可用于数组的排序:先来看一个例子: var arr = [1, 2, 3, 5, 7, 78, 8, 89]; arr.sort(); console.log(arr); // ...

  10. backgroundworker的使用问题

    这几天做项目懒了就用backgroundworker这个控件,觉得它比多线程方便一些,然后这个线程里面在开线程,然后惨剧就发生了:当我打开一个主窗口后,在打开一个子窗口,子窗口里有个backgroun ...