前言:spark源码分析系列 ,文中有错误的地方 请多多指正。体系架构如下,可以看出spark是一个全兼容的生态圈,不一定是最好的,但是是最全面的,一个spark生态圈就可以解决绝大多数数的大数据问题。

spark split 源码 spark源码解析_spark

一、spark基本概念

1.Application:就是一个程序,一个jar包,一个war包,也就是通过spark-submit提交的程序

2.Driver:就是为这个应用所提供的运行环境,上下文环境等等,也就是spark的一些Api等等

2.Job:Application中的一个action算子就是一个job,每遇到一个就算一个

4.Stage:job的具体划分,一个job可以划分成多个stage,根据宽依赖还是窄依赖,如果父RDD中的数据进入不同的子RDD就是宽依赖,反之就是窄依赖,宽依赖和窄依赖的边界就是stage的划分点

5.Task:Stage的具体划分,也就是说这个job分成多少个task,也就是这个job的具体的执行逻辑单元

6.Excutor:执行具体task的的物理单元,包括IP地址,cpu,内存等等。

 

二、spark是一款分布式计算框架,代码运行在集群的各个节点上,spark将集群节点分为三类

  1:master   Spark管理节点,负责管理Worker进程,协调调度Client发布的任务处理,Master节点可以为多个,有且仅能有一个为acitvity状态,其他为standby状态

  2:worker   Spark工作节点,负责具体的任务执行工作

  3:client   Spark任务节点,负责发布,查询,以及中止任务的相关进程的统称,Client是运行时有效进程,如果相关任务处理完成,对应的进程结束。

 

三、将自己写好的代码发布到集群上运行,需要使用spark-submit脚本。submit的方式有三种

  1:local: 本地模式只有Driver,没有Master和Worker。执行任务的Executor与Driver在同一个JVM进程中,一般用于测试

  2:standalone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构。该模式主要的节点有Client节点、Master节点和Worker节点。其中Driver既可以运行在Master节点上中,也可以运行在本地Client端。当用spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行;由--master参数控制。当使用spark-submit工具提交Job或者在Eclips、IDEA等开发平台上使用”new SparkConf.setManager(“spark://master:7077”)”方式运行Spark任务时,Driver是运行在本地Client端上的。 

  3:yarn:Hadoop资源管理器Yarn,资源管理交给Yarn而Spark只负责任务调度与计算部分。技术较为成熟、最为常用。按照driver的位置又可以分为yarn-client和yarn-cluster,由deploy-mode参数控制。Yarn-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互,因为Driver在客户端,所以可以通过webUI访问Driver的状态,默认是http://hadoop1:4040访问,而YARN通过http:// hadoop1:8088访问。Yarn-Client模式中,Driver在运行在集群上的某一台节点上,该节点是ApplicationMaster。二者的区别是:ApplicationMaster的作用不同,前者只是负责和ResourceManger注册申请资源,后者不仅仅是要申请资源,还要在该节点初始化Driver。

具体的执行流程(standalone)

  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.直到任务完成

四、Spark 架构如下图

spark split 源码 spark源码解析_spark源码系列教程_02

从图中可以看出,spark包括几大模块:其中2、3、4、5都需要1模块,以后的文章主要介绍spark core

1、spark core (apache spark)

2、spark sql(spark 杀手锏,离线处理神器)

3、spark streaming (准实时处理,类似strom)

4、saprk mllib (机器学习)

5、graphx (数据挖掘,数据分析)