Spark源码分析(一)-Standalone启动过程
原创文章,转载请注明: 转载自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启动过程的更多相关文章
- Spark 源码分析 -- task实际执行过程
Spark源码分析 – SparkContext 中的例子, 只分析到sc.runJob 那么最终是怎么执行的? 通过DAGScheduler切分成Stage, 封装成taskset, 提交给Task ...
- tomcat8 源码分析 | 组件及启动过程
tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...
- Netty源码分析之客户端启动过程
一.先来看一下客户端示例代码. public class NettyClientTest { public void connect(int port, String host) throws Exc ...
- wxWidgets源码分析(1) - App启动过程
目录 APP启动过程 wxApp入口定义 wxApp实例化准备 wxApp的实例化 wxApp运行 总结 APP启动过程 本文主要介绍wxWidgets应用程序的启动过程,从app.cpp入手. wx ...
- Hive源码分析(1)——HiveServer2启动过程
1.想了解HiveServer2的启动过程,则需要找到启动HiveServer2的入口,hive服务的启动命令为hive --service HiveServer2,通过分析$HIVE_HOME/bi ...
- Spark源码分析之Checkpoint的过程
概述 checkpoint 的机制保证了需要访问重复数据的应用 Spark 的DAG执行图可能很庞大,task 中计算链可能会很长,这时如果 task 中途运行出错,那么 task 的整个需要重算非常 ...
- Spark源码分析 – 汇总索引
http://jerryshao.me/categories.html#architecture-ref http://blog.csdn.net/pelick/article/details/172 ...
- spark 源码分析之四 -- TaskScheduler的创建和启动过程
在 spark 源码分析之二 -- SparkContext 的初始化过程 中,第 14 步 和 16 步分别描述了 TaskScheduler的 初始化 和 启动过程. 话分两头,先说 TaskSc ...
- Spark源码分析(三)-TaskScheduler创建
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3879151.html 在SparkContext创建过程中会调用createTaskScheduler函 ...
- 【转】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- ...
随机推荐
- KafkaOffsetMonitor使用方法
(1)下载jar包 去网上搜索KafkaOffsetMonitor即可. 我这里共享了我的百度云连接:http://yun.baidu.com/s/1nvGjbDn 如果某一天我这个取消共享了,大家去 ...
- Easy-UI 动态添加DataGrid的Toolbar按钮
在前人的基础上进行的修改,不知道他是从哪里引用来的,所以没有粘贴引用地址. 原代码不支持1.3.6. 修改功能: 1.如果之前没有添加过工具,用这个方法不能添加(已修复): 2.估计是不支持1.3.6 ...
- Modelsim的demo入门教程
写在前面的话学过MCU设计的朋友都知道,系统调试是多么的重要.而对于FPGA设计来说,仿真确实最重要的.一个完整的项目,必须有完整的仿真平台.有朋友说,按键仿真模型没法搞. 我只能说,你并不了解硬件及 ...
- arm-elf-gcc汇编代码个人理解
arm-elf-gcc汇编代码个人理解 有关arm-elf-gcc的安装使用问题请参照本人博客的另一篇文章http://www.cnblogs.com/wsine/p/4664503.html 由于各 ...
- vimium
安装在chrome上的一个插件,可以实现chrome无鼠标无键盘操作. 事实上vimium就是提供了一系列的快捷键列表,所以只要熟悉了这些快捷键就可以方便使用了. 要查看快捷键列表,打开chrome, ...
- .net之XML
前言 想想毕业到现在已经工作了3个月,总结的知识点还是太少.这周因为项目完成的差不多了,有空补充一下知识,上周学了XML吗,一直都没有总结.今天便总结一下,一方面梳理一下知识点,一方面巩固下知识. X ...
- string::rfind
该函数返回目标字符串(key)在源字符串中最后一次匹配的位置 如果没有找到匹配的位置则返回string::npos,是一个无符号整形数字,可以打印看看 //// string::rfind #incl ...
- HDU 5446 Unknown Treasure Lucas+中国剩余定理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 Unknown Treasure 问题描述 On the way to the next se ...
- 链路层三种类型的MAC地址
若需要转载,请注明出处. 我们知道,链路层都是以MAC地址来进行通信双方的地址标识的,如下图:在应用中根据接收方的多寡来进行划分,可分为以下三种: 单播(Unicast) 多播(Multicast) ...
- 【POJ】【1160】Post Office
DP/四边形不等式 邮局,经典的四边形不等式例题! 关于四边形不等式的学习请看 赵爽论文<动态规划加速原理之四边形不等式> 题目总结&题解:http://blog.csdn.net ...