Spark中的术语图解总结

参考:http://www.raincent.com/content-85-11052-1.html

1、Application:Spark应用程序

指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。

Spark应用程序,由一个或多个作业JOB组成,如下图所示:

1.jpg

2、Driver:驱动程序

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

2.jpg

3、Cluster Manager:资源管理器

指的是在集群上获取资源的外部服务,常用的有:

  • Standalone,Spark原生的资源管理器,由Master负责资源的分配;
  • Haddop Yarn模式由Yarn中的ResearchManager负责资源的分配;
  • Messos,由Messos中的Messos Master负责资源管理。
3.jpg

4、Executor:执行器

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

4.jpg

5、Worker:计算节点

集群中任何可以运行Application代码的节点,类似于Yarn中的NodeManager节点。

  • 在Standalone模式中指的就是通过Slave文件配置的Worker节点
  • 在Spark on Yarn模式中指的就是NodeManager节点
  • 在Spark on Messos模式中指的就是Messos Slave节点
5.jpg

6、RDD:弹性分布式数据集

Resillient Distributed Dataset,Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作),如下图所示:

6.jpg

7、Lineage(血统)

记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

8、依赖

RDDs通过操作算子进行转换,转换得到的新RDD包含了从其他RDDs衍生所必需的信息,RDDs之间维护着这种血缘关系,也称之为依赖。

1)窄依赖(比喻:独生子女)

RDDs之间分区是一一对应的,父RDD每一个分区最多被一个子RDD的分区所用;表现为一个父RDD的分区对应于一个子RDD的分区,或两个父RDD的分区对应于一个子RDD 的分区。如图所示:

7.jpg

常见的窄依赖有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned :如果JoinAPI之前被调用的RDD API是宽依赖(存在shuffle), 而且两个join的RDD的分区数量一致,join结果的rdd分区数量也一样,这个时候join api是窄依赖)。

2)宽依赖(比喻:超生)

下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系。父RDD的每个分区都可能被多个子RDD分区所使用,子RDD分区通常对应所有的父RDD分区。如图所示:

8.jpg

常见的宽依赖有groupByKey、partitionBy、reduceByKey、join(父RDD不是hash-partitioned :除此之外的,rdd 的join api是宽依赖)。

9、DAG:有向无环图

Directed Acycle graph,反应RDD之间的依赖关系,如图所示:

9.jpg

10、DAGScheduler:有向无环图调度器

基于DAG划分Stage并以TaskSet的形势提交Stage给TaskScheduler;

负责将作业拆分成不同阶段的具有依赖关系的多批任务;

最重要的任务之一就是:计算作业和任务的依赖关系,制定调度逻辑

在SparkContext初始化的过程中被实例化,一个SparkContext对应创建一个DAGScheduler。

10.jpg

11、TaskScheduler:任务调度器

将Taskset提交给worker(集群)运行并回报结果;负责每个具体任务的实际物理调度。如图所示:

11.jpg

12、Job:作业

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

12.jpg

13、Stage:调度阶段

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

13.jpg

14、TaskSet:任务集

由一组关联的,但相互之间没有Shuffle依赖关系的任务所组成的任务集。如图所示:

14.jpg

提示:

1)一个Stage创建一个TaskSet;
2)为Stage的每个Rdd分区创建一个Task,多个Task封装成TaskSet

15、Task:任务

被送到某个Executor上的工作任务;单个分区数据集上的最小处理流程单元。如图所示:

15.jpg

总体如图所示:

16.jpg

常见的窄依赖有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned :如果JoinAPI之前被调用的RDD API是宽依赖(存在shuffle), 而且两个join的RDD的分区数量一致,join结果的rdd分区数量也一样,这个时候join api是窄依赖)。

猜你喜欢

转载自www.cnblogs.com/MWCloud/p/11405631.html