zoukankan      html  css  js  c++  java
  • 【Spark2.0源码学习】-1.概述

          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属于一个比较大的工程,时间有限,很多非关键点会选择点到即止,另外存在理解错误望理解与指正!
  • 相关阅读:
    FreeMarker中List排序
    Mingyang.net:为什么不将Bean定义在Action参数中?
    长春市学校标识码
    java解析html的table
    java发送http的get、post请求【备忘】
    CentOS安装CAS 5.3.4服务端
    设置JAVA环境变量
    CentOS安装Maven
    为tomcat8安装Native library
    openresty用naxsi防xss、SQL注入
  • 原文地址:https://www.cnblogs.com/hframe/p/6735123.html
Copyright © 2011-2022 走看看