Spark作为当前主流的分布式计算框架,其高效性、通用性、易用性使其得到广泛的关注,本系列博客不会介绍其原理、安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续在Spark使用以及设计类似产品提供相关经验,下面开始进入正题。
 
     本系列博客将从集群各端点的设计原理、通信方式、启动流程,以及用户任务提交后,任务的集群加载、分解、调度的方式两个方面进行解读。
 
首先,从脚本开始
 
          详见《【Spark2.0源码学习】-2.一切从脚本说起》
 
其次,在集群各端点的设计原理、通信方式、启动方面
 
     Spark集群由若干节点构成,而每个节点都是可以接受与发送消息的RPC服务端点(终端 ,英文:Endpoint),根据责任的不同可以分为三类端点:Client、Master、Worker,三端调用关系:
 
  1. Client: Spark任务节点,负责发布,查询,以及中止任务的相关进程的统称,Client是运行时有效进程,如果相关任务处理完成,对应的进程结束
  2. Master: Spark管理节点,负责管理Worker进程,协调调度Client发布的任务处理,Master节点可以为多个,有且仅能有一个为acitvity状态,其他为standby状态
  3. Worker: Spark工作节点,负责具体的任务执行工作
 
     我们将在如下章节逐步介绍:
     《【Spark2.0源码学习】-3.Endpoint模型介绍》
     《【Spark2.0源码学习】-4.Master启动》
     《【Spark2.0源码学习】-5.Worker启动》
     《【Spark2.0源码学习】-6.Client启动》
 
最后,在任务的集群加载、分解、调度方面
 
     基于三端模型,用户通过spark-submit提交或者运行spark-shell REPL,集群创建Driver,Driver加载Application,最后Application根据用户代码转化为RDD,RDD分解为Tasks,Executor执行Task等系列知识,整体交互蓝图如下:
 
     (注:如果不能完全理解,可在阅读完相关章节后再回来理解)
  1. Client运行时向Master发送启动驱动申请(发送RequestSubmitDriver指令)
  2. Master调度可用Worker资源进行驱动安装(发送LaunchDriver指令)
  3. Worker运行DriverRunner进行驱动加载,并向Master发送应用注册请求(发送RegisterApplication指令)
  4. Master调度可用Worker资源进行应用的Executor安装(发送LaunchExecutor指令)
  5. Executor安装完毕后向Driver注册驱动可用Executor资源(发送RegisterExecutor指令)
  6. 最后是运行用户代码时,通过DAGScheduler,TaskScheduler封装为可以执行的TaskSetManager对象
  7. TaskSetManager对象与Driver中的Executor资源进行匹配,在队形的Executor中发布任务(发送LaunchTask指令)
  8. TaskRunner执行完毕后,调用DriverRunner提交给DAGScheduler,循环7.直到任务完成
     
    我们将在如下章节逐步介绍:
     《【Spark2.0源码学习】-7.Driver与DriverRunner》
     《【Spark2.0源码学习】-8.SparkContext与Application介绍》
     《【Spark2.0源码学习】-9.Job提交与Task的拆分》
     《【Spark2.0源码学习】-10.Task执行与回馈》
 
     说明:由于Spark属于一个比较大的工程,时间有限,很多非关键点会选择点到即止,另外存在理解错误望理解与指正!

【Spark2.0源码学习】-1.概述的更多相关文章

  1. spark2.0源码学习

    [Spark2.0源码学习]-1.概述 [Spark2.0源码学习]-2.一切从脚本说起 [Spark2.0源码学习]-3.Endpoint模型介绍 [Spark2.0源码学习]-4.Master启动 ...

  2. 【Spark2.0源码学习】-2.一切从脚本说起

    从脚本说起      在看源码之前,我们一般会看相关脚本了解其初始化信息以及Bootstrap类,Spark也不例外,而Spark我们启动三端使用的脚本如下: %SPARK_HOME%/sbin/st ...

  3. 【Spark2.0源码学习】-3.Endpoint模型介绍

         Spark作为分布式计算框架,多个节点的设计与相互通信模式是其重要的组成部分.   一.组件概览      对源码分析,对于设计思路理解如下:            RpcEndpoint: ...

  4. 【Spark2.0源码学习】-6.Client启动

    Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作 一.脚本概览      下面是一个举例: /opt/jdk1..0_79/bin/jav ...

  5. 【Spark2.0源码学习】-4.Master启动

         Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作   一.脚本概览      下面是一个举例: /opt/jdk1..0_79/ ...

  6. 【Spark2.0源码学习】-5.Worker启动

         Worker作为Endpoint的具体实例,下面我们介绍一下Worker启动以及OnStart指令后的额外工作   一.脚本概览      下面是一个举例: /opt/jdk1..0_79/ ...

  7. 【Spark2.0源码学习】-9.Job提交与Task的拆分

          在前面的章节Client的加载中,Spark的DriverRunner已开始执行用户任务类(比如:org.apache.spark.examples.SparkPi),下面我们开始针对于用 ...

  8. 【Spark2.0源码学习】-10.Task执行与回馈

         通过上一节内容,DriverEndpoint最终生成多个可执行的TaskDescription对象,并向各个ExecutorEndpoint发送LaunchTask指令,本节内容将关注Exe ...

  9. 【Spark2.0源码学习】-7.Driver与DriverRunner

         承接上一节内容,Client向Master发起RequestSubmitDriver请求,Master将DriverInfo添加待调度列表中(waitingDrivers),下面针对于Dri ...

随机推荐

  1. 如何让celery接受定制的参数

    背景介绍 最近的一个项目使用到celery结算订单,使用celery的确很方便.但是复杂的内部框架导致了需要传人大量的参数例如数据库配置文件等.下面先来看看我仿照官网写的代码.所有代码都放到githu ...

  2. .NET学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 你可以通过百度云盘下载.NET学习路线图相关视频资源 链接: http://pan.baidu.com/s/1pL2gCK7 密码: ...

  3. JAVA基础知识系列---进程、线程安全

    1 相关概念 1.1 临界区 保证在某一时刻只有一个线程能访问数据的简便方法,在任意时刻只允许一个线程对资源进行访问.如果有多个线程试图同时访问临界区,那么在有一个线程进入后,其他所有试图访问临界区的 ...

  4. 配置Server Side TAF

    实验环境:Oracle 11.2.0.4 RAC 参考MOS文档: How To Configure Server Side Transparent Application Failover (文档 ...

  5. 谷歌(Google Chrome)插件安装

    chrome应用商店打不开,安装插件的另一种方式 接下来以JsonView为例讲解安装步骤: 1.打开GitHub: https://github.com 2.搜索jsonview 3.选择需要的插件 ...

  6. Linux实战教学笔记25:自动化运维工具之ansible (一)

    第二十五节 ansible之文件的批量分发 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转 ...

  7. jquery写日期选择器

    跟上我的脚步,让我们来领略代码的世界! 使用jquery做一个日期时间选择器,最好使用bootstrap弹窗 实现: (1)点击文本框弹出窗口: (2)弹窗里面显示日期时间选择下拉 (3)年份取当前年 ...

  8. java-信息安全(四)-数据签名、数字证书

    概述 信息安全基本概念: 数字签名 数字证书 数字签名 数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名 ...

  9. 【转】Django Middleware

    Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的.我们可以在 Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以 ...

  10. spring学习——注入静态对象属性

    spring注入静态对象属性时,因为虚拟机类加载问题,直接在属性上使用@Autowired 是不可以的.需要在属性对应的set方法上@Autowired,并且,set方法不能定义为static. 1. ...