其他分享
首页 > 其他分享> > Spark工作原理

Spark工作原理

作者:互联网

Spark简介

Spark Streaming基于Spark Core实现了可扩展、高吞吐和容错的实时数据流处理。现在支持的数据源有Kafka、Flume、Twitter、ZeroMQ、Kinesis、HDFS、S3和TCP socket。处理后的结果可以存储到HDFS、Database或者Dashboard中。

Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,也就是把Spark Streaming的输入数据按照批处理尺寸(如1秒)分成一段一段的数据(Stream),每一段数据都转换成Spark中的RDD,然后将SparkStreaming中对DStream的转换操作变为针对Spark中对RDD的转换操作,将RDD经过操作变成中间结果保存在内存中。

Spark架构

Application:Spark应用程序

指的是用户编写的Spark应用程序,包含Driver功能代码和分布在集群中多个节点上运行的Executor代码。Spark应用程序,由一个或多个作业Job组成。

Driver Program:驱动程序

Spark中的Driver即运行上述Application的Main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。
在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。
通常SparkContext代表Driver。

Cluster Manager:资源管理器

集群资源管理中心,负责分配计算资源。
常用的有:

  1. Local,Spark单机运行,一般用于开发测试;
  2. Standalone,Spark原生的资源管理器,由Master负责资源的分配;
  3. Hadoop Yarn,由Yarn中的ResearchManager负责资源的分配;由Messos中的Messos Master负责资源管理。

Worker Note:计算节点

工作节点,负责完成具体计算。

Executor:执行器

Application运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor

举例类比

  1. Cluster Manager在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器负责分配资源,有点像YARN中ResourceManager那个角色,大管家握有所有的干活的资源,属于乙方的总包。
  2. WorkerNode是可以干活的节点,听大管家ClusterManager差遣,是真正有资源干活的主。从节点,负责控制计算节点,启动Executor或者Driver。
  3. Executor是在WorkerNode上起的一个进程,相当于一个包工头,负责准备Task环境和执行
  4. Task,负责内存和磁盘的使用。Task是施工项目里的每一个具体的任务。
  5. Driver是统管Task的产生与发送给Executor的,运行Application 的main()函数,是甲方的司令员。
  6. SparkContext是与ClusterManager打交道的,负责给钱申请资源的,是甲方的接口人。
  1. 甲方来了个项目,创建了SparkContext,SparkContext去找ClusterManager申请资源同时给出报价,需要多少CPU和内存等资源。ClusterManager去找WorkerNode并启动Excutor,并介绍Excutor给Driver认识。
  2. Driver根据施工图拆分一批批的Task,将Task送给Executor去执行。
  3. Executor接收到Task后准备Task运行时依赖并执行,并将执行结果返回给Driver
  4. Driver会根据返回回来的Task状态不断的指挥下一步工作,直到所有Task执行结束。

Spark工作流程

基础概念

1. Job:作业

由一个或多个调度阶段所组成的一次计算作业;包含多个Task组成的并行计算,往往由Spark Action催生,一个Job包含多个RDD及作用于相应RDD上的各种Operation。

2. Stage:调度阶段

一个任务对应的阶段;
每个Job会被拆分很多组Task,每组任务被称为Stage,也可称TaskSet,一个作业分为多个阶段;
Satge分成两种类型ShuffleMapStage、ResultStage。

一个stage的所有Task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。下一个stage的Task的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将我们自己编写的代码逻辑全部执行完,并且计算完所有的数据,得到我们想要的结果为止。

3. TaskSet:任务集

由一组关联的,但相互之间没有Shuffle依赖关系的任务所组成的任务集。
1) 一个Stage创建一个TaskSet;
2) 为Stage的每个RDD分区创建一个Task,多个Task分装成TaskSet。

4. Task:任务

被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元。
Task也是最小的计算单元,一个TaskSet中的Task负责执行一模一样的计算逻辑(也就是我们自己编写的某个代码片段),只是每个Task处理的数据不同而已

Spark运行流程


  1. 创建作业(Job):使用spark-submit提交一个Spark作业。
  2. 启动驱动程序(Driver Program),同时也是创建一个SparkContext
  3. SparkContext在资源管理器(Cluster Manager)中注册,并申请运行所需的资源(也就是执行器(Executor))
  4. 资源管理器(Cluster Manager)分配并启动Excutor
  5. SparkContext构建DAG图
  6. SparkContext中的DAGScheduler根据DAG图将Job分解成Stage
  7. TaskScheduler为每个Stage创建一批任务,形成TaskSet
  8. Executor向SparkContext申请执行的Task
  9. TaskScheduler将Task发放给Executor,同时SparkContext将应用程序代码发放给Executor

参考资料

  1. Spark原理篇之工作原理-CSDN
  2. Spark工作原理-CSDN
  3. 30分钟理解Spark的基本原理-知乎
  4. Spark 学习: spark 原理简述 - 知乎 (zhihu.com)
  5. Spark原理篇之工作原理-CSDN博客
  6. 张安站,Spark技术内幕:深入解析Spark内核架构设计与实现原理[N].机械工业出版社,2015

标签:SparkContext,Task,Driver,工作,Executor,原理,Spark,负责
来源: https://www.cnblogs.com/bettergoo/p/15799446.html